2017-05-15 8 views
1

Ich versuche, Stichprobengewichtung mit ImageGenerator in einer pixelweisen Segmentierung Aufgabe zu verwenden.Wie verwenden Sie Beispielgewichte mit Datenerweiterung in Keras?

  • Bilder und Masken numpy Arrays (634, 1, 64, 64)
  • Masken haben 5 Klassen (codiert als 0 bis 4)
  • sample_weight ein Array (634, 64, 64)
  • Daten Augmentation .flow für 2-Generatoren mit identischen seed=42 und batch_size=32
  • Modell mit sample_weight_mode='temporal'
  • letzten 3 Schichten zusammengestellt werden unter Verwendung von i n die Unet Modells sind:

    conv2d_19 (Conv2D) (None, 5, 64, 64)  325   
    dropout_18[0][0]     
    
    conv2d_20 (Conv2D) (None, 1, 64, 64)  6   
    conv2d_19[0][0]     
    
    activation_1 (Activation) (None, 1, 64, 64)  0 
    conv2d_20[0][0] 
    

dies ein Fehler wirft:

ValueError: Found a sample_weight array with shape (634, 64, 64). In order to use timestep-wise sample weighting, you should pass a 2D sample_weight array.

Wenn ich sample_weight neu zu gestalten (634, 4096) erhalte ich:

ValueError: Found a sample_weight array with shape (634, 4096) for an input with shape (32, 1, 64, 64). sample_weight cannot be broadcast.

Ist das mein Missverständnis, wie man verwendet ImageGenerator oder ist es nicht in der Lage, mit dieser speziellen Situation umzugehen?

Wenn ich keine Beispielgewichte verwende, wird das Modell ausgeführt, und es werden keine Fehler ausgegeben.

Keras 2.0.4, Theano 0,9

Antwort

1

Die Keras Einwaagen als Eingabe einen 1D-Array (ein Gewicht pro Funktion) im Standardmodus und einen 2D-Array in zeitlichem Modus. Der zeitliche Modus könnte für Sie arbeiten, aber Sie müssten die folgenden Änderungen vornehmen. Grundsätzlich unterstützt Keras keine 3D-Gewichte, daher müssen Sie Ihre 64x64-Bilder am Eingang abflachen und Ihren Tensor vor den Faltungsschichten in 2D umformen.

1) umformen zu sample_weight 634,4096

2) fügen eine Eingangsschicht, mit der lange eine abgeflachte Bild 4096 Pixel akzeptiert: Keras wird nun pro Pixel Gewichte akzeptieren, um die Pixel als eine zeitliche Folge Berücksichtigung (ein 1D Signal)

3) eine Reshape-Schicht vor der ersten 2D-Faltung hinzufügen

Verwandte Themen