2017-07-03 18 views
3

イメージから機械印刷されたテキストをセグメント化するためのモデルを訓練しています。画像には、バーコードと手書きのテキストも含まれている場合があります。グラウンドトゥルース画像は、0が機械プリントを表し、1が残りを表すように処理される。そして、私は最後に2つのマップを出力する膨張と5層のCNNを使用しています。Tensorflowセマンティックセグメンテーションで損失がゼロになる

そして、私の損失は以下のように計算されます。

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') 

そして、私は唯一の手書きのテキストが含まれていると、それに対応する地上真理は、1秒で表現されている白紙ページであるいくつかのイメージがあります。

私はモデルを訓練すると、これらの画像では、0の損失と100%の訓練の精度が得られます。これは正しいです?この損失はどのようにゼロになりますか? バーコードや機械印刷を含む他の画像では、多少のロスがあり、正しく収束しています。

このモデルをテストすると、バーコードが正しく無視されます。しかし、それはマシンプリントだけを必要とするところで、マシンプリントと手書きの両方のテキストを出力します。

誰かが私が間違っている場所で私を案内できますか?

UPDATE 1:

私は前に0.01の学習率を使用し、0.0001にそれを変えましたが私にいくつかの損失を与えた、非常によく収束ではなく、のようです。 しかし、高い学習率はどのように0の損失を与えますか?

学習率0.01のCaffeで同じモデルを使用すると、若干の損失があり、Tensorflowと比較してうまく収束します。

+0

ログとラベルはワンホットエンコードされていますか? – marcopah

+0

@marcopahはい。私は質問に記載されている損失関数の最初の2行でこれをやっていると思います。私のロジットの形状は[batch_size、num_classes]で、テンソルフロードックで推奨されているように、ラベルの形状は[batch_size]です。 –

答えて

1

あなたの損失の計算はうまくいくようですが、あなたのケースではゼロの損失が奇妙です。学習率で遊んだことがありますか?多分それを減らしてください。私は奇妙な損失の値に遭遇し、学習率を下げることが私を助けました。

+0

これはおそらく参考になるフィードバックですが、回答ではなくコメントとして意味があると思います。 –

関連する問題