Binär-Cross-Entropie-Verlust sollte mit sigmod
Aktivierung in der letzten Schicht verwendet werden und es bestraft stark entgegengesetzte Vorhersagen. Es wird nicht berücksichtigt, dass die Ausgabe ein One-Hot-Code ist und die Summe der Vorhersagen sollte 1. Aber wie falsche Vorhersagen stark bestrafen das Modell lernt etwas richtig zu klassifizieren.
Jetzt zu erzwingen, der vorherige von einem heißen Code ist softmax
Aktivierung mit kategorischer Kreuz-Entropie zu verwenden. Das sollten Sie verwenden.
Jetzt das Problem ist die Verwendung der softmax
in Ihrem Fall als Keras nicht softmax auf jedem Pixel unterstützen.
Der einfachste Weg, um darüber zu gehen ist permute die Dimensionen (n_rows, n_cols, 7) Permute
Schicht verwendet und umformen es dann zu (n_rows * n_cols, 7) mit Reshape
Schicht. Dann können Sie die Aktivierungsschicht softmax
hinzufügen und den Verlust von crosssetopy verwenden. Die Daten sollten entsprechend neu gestaltet werden.
Der andere Weg, dies zu tun wird Tiefen softmax zu implementieren:
def depth_softmax(matrix):
sigmoid = lambda x: 1/(1 + K.exp(-x))
sigmoided_matrix = sigmoid(matrix)
softmax_matrix = sigmoided_matrix/K.sum(sigmoided_matrix, axis=0)
return softmax_matrix
und als Lambda-Schicht verwenden:
model.add(Deconvolution2D(7, 1, 1, border_mode='same', output_shape=(7,n_rows,n_cols)))
model.add(Permute(2,3,1))
model.add(BatchNormalization())
model.add(Lambda(depth_softmax))
Wenn tf
image_dim_ordering
verwendet wird, dann können Sie Art und Weise tun mit den Permute
Schichten.
Für weitere Referenz überprüfen here.
Vielen Dank für Ihre sehr detaillierte Antwort! Ich ging mit der Umformung, Softmax und kategorischer Cross-Entropie. Würden Sie erwarten, dass es zwischen den beiden Methoden erhebliche Leistungsunterschiede in Bezug auf Geschwindigkeit oder Endgenauigkeit gibt? Danke noch einmal! – TSW
Ich habe nicht selbst an diesem Szenario gearbeitet, aber Sie können beide überprüfen. Eine andere Sache, die du ausprobieren kannst, ist, zuerst ein Modell mit finaler Ebene als "Sigmoid" und binären Cross-Entropie-Verlust zu erstellen und nach dem Training die oberste Ebene zu ersetzen und mit "softmax" zu enden und mit kategorischer Kreuz-Entropie fortzuschreiten. Das 2. Training wird schnell konvergieren, aber ich würde darauf wetten, dass die Trainingszeit insgesamt kürzer wird und eine bessere Genauigkeit hat. – indraforyou
Hi indraforyou, ich arbeite auch an einer semantischen Segmentierung Fall. Das maskierte Bild wird als (1, n_Rows, n_cols) dargestellt. Kann ich für diesen Fall sigmoidale und binäre Cross-Entropien verwenden? Gibt es spezielle Verfahren? – user297850