Ich bin in der Lage, eine U-net mit beschrifteten Bildern, die eine binäre Klassifizierung haben, zu trainieren.Wie implementiert man semantische Multi-Klassen-Segmentierung?
Aber ich habe eine harte Zeit herauszufinden, wie die endgültigen Schichten in Keras/Theano für Multi-Klasse-Klassifizierung (4 Klassen) zu konfigurieren.
Ich habe 634 Bilder und entsprechende 634 Masken, die unit8
und 64 x 64 Pixel sind.
Meine Masken, statt schwarz zu sein (0) und Weiß (1), hat Farbe markierte Objekte in 3 Kategorien und Hintergrund wie folgt:
- schwarz (0), Hintergrund
- rot (1), Objektklasse 1
- grün (2), Objektklasse 2
- gelb (3), Objektklasse 3
Vor Trainingsläufen, wobei die Anordnung enthält Masken ist ein heiß wie folgt codiert:
mask_train = to_categorical(mask_train, 4)
Dies macht mask_train.shape
von (634, 1, 64, 64)
zu (2596864, 4)
gehen.
Mein Modell folgt genau der Unet-Architektur, aber die letzten Schichten scheinen problematisch zu sein, da ich die Struktur nicht abflachen kann, um sie dem One-Hot-kodierten Array anzupassen.
[...]
up3 = concatenate([UpSampling2D(size=(2, 2))(conv7), conv2], axis=1)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(up3)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv8)
up4 = concatenate([UpSampling2D(size=(2, 2))(conv8), conv1], axis=1)
conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(up4)
conv10 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv9)
# here I used number classes = number of filters and softmax although
# not sure if a dense layer should be here instead
conv11 = Conv2D(4, (1, 1), activation='softmax')(conv10)
model = Model(inputs=[inputs], outputs=[conv11])
# here categorical cross entropy is being used but may not be correct
model.compile(optimizer='sgd', loss='categorical_crossentropy',
metrics=['accuracy'])
return model
Haben Sie Vorschläge, wie Sie die letzten Teile des Modells ändern können, damit dies erfolgreich trainiert wird? Ich erhalte eine Vielzahl von Fehlern bei der Formübereinstimmung, und die wenigen Male, die ich es schaffte, es laufen zu lassen, änderte sich der Verlust während Epochen nicht.
I verwende das Theano-Back-End, also Kanäle zuerst - denkst du, dass die letzten Schichten in meinem Modell korrekt erscheinen? – pepe
Was definiert, wenn Kanäle zuerst oder zuletzt sind, ist "keras", nicht theano. Der Standardwert ist Kanäle zuletzt. –
ja, aber ich habe meine Keras richtig für Theano in .keras.json eingerichtet, so hat sich mein Anliegen an das Modell gewandt, da ich unsicher bin, wie es in der Endphase geformt werden sollte – pepe