2017-07-03 6 views
3

Ich trainiere ein Modell zum Segmentieren von maschinell gedruckten Text aus den Bildern. Die Bilder können auch Barcodes und handschriftlichen Text enthalten. Grundwahrheitsbilder werden so verarbeitet, dass 0 den Maschinendruck und 1 den Rest darstellt. Und ich benutze 5-Schicht-CNN mit Dilatation, die am Ende 2 Karten ausgibt.Tensorflow semantische Segmentierung gibt Null-Verlust

Und mein Verlust berechnet sich wie folgt:

def loss(logits, labels): 

    logits = tf.reshape(logits, [-1, 2]) 
    labels = tf.reshape(labels, [-1]) 

    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels) 
    cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy') 

Und ich habe einige Bilder, die nur handgeschriebenen Text enthalten und ihre entsprechenden Boden Wahrheiten sind leere Seiten, die von 1s dargestellt werden.

Wenn ich das Modell trainiere, bekomme ich für diese Bilder einen Verlust von 0 und eine Trainingsgenauigkeit von 100%. Ist das richtig? Wie kann dieser Verlust Null sein? Für andere Bilder, die Barcodes oder Maschinendruck enthalten, bekomme ich einen Verlust und sie konvergieren richtig.

Und wenn ich dieses Modell teste, werden Barcodes korrekt ignoriert. Aber es gibt sowohl Maschinendruck als auch handgeschriebenen Text aus, wo ich nur Maschinendruck benötige.

Kann mir jemand sagen, wo ich falsch liege?

UPDATE 1:

ich eine Lernrate von 0,01 vor und ändert es auf 0,0001 gab mir einen gewissen Verlust verwenden und es scheint, aber nicht sehr gut zu konvergieren. Aber dann, wie eine hohe Lernrate einen Verlust von 0 geben wird?

Wenn ich das gleiche Modell in Caffe mit einer Lernrate von 0,01 verwende, gab es etwas Verlust und es konvergiert gut im Vergleich zu Tensorflow.

+0

Sind Ihre Logits und Labels ein-hot-encodiert? – marcopah

+0

@marcopah Ja. Ich denke, dass ich das in den ersten 2 Zeilen der Verlustfunktion mache, die in der Frage beschrieben werden. Meine Logits haben die Form [batch_size, num_classes] und Beschriftungen haben die Form [batch_size], wie in Tensorflow-Dokumenten empfohlen. –

Antwort

1

Ihre Verlustberechnung sieht gut aus, aber ein Verlust von Null ist in Ihrem Fall seltsam. Hast du versucht mit der Lernrate zu spielen? Vielleicht verringern Sie es. Ich bin auf seltsame Verlustwerte gestoßen und die Lernrate hat mir geholfen.

+0

Während dies wahrscheinlich hilfreiches Feedback ist, denke ich, dass es mehr als ein Kommentar als eine Antwort Sinn machen würde. –