2017-07-03 39 views
3

我訓練分割從圖像中機器打印文本的典範。圖像可能還包含條形碼和手寫文字。處理基礎真實圖像,以便0代表機器打印,1代表剩餘部分。我使用5層CNN,最後輸出2張地圖。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') 

而且我只包含手寫文字及其相應的基礎事實是這是由1S代表空白頁一些圖片。

當我訓練模型,這些圖片我得到的0和100%的訓練精度的損失。它是否正確?這種損失如何能爲零? 對於其他包含條形碼或機器打印的圖像,我們正在獲得一些損失,它們正在收斂。

當我測試這個模型,條形碼是否正確忽略。但它只輸出機器打印和手寫文本,而我只需要機器打印。

有人能指導我在哪裏,我錯了,請!

更新1:

我用之前0.01的學習率,將其更改爲0.0001給了我一些損失,似乎收斂,但不是很好。 但是,如果高學習率會導致0的損失?

當我使用相同的模型來自Caffe與學習的0.01率也給出了一些損失,它收斂以及相比Tensorflow。

+0

您的登錄和標籤是否是熱門編碼? – marcopah

+0

@marcopah是的。我想我是在問題中描述的前兩行丟失函數中這樣做的。我的logits形狀爲[batch_size,num_classes],標籤的形狀爲[tens_size],正如tensorflow文檔中所推薦的。 –

回答

1

你的損失計算看起來不錯,但零損失是你的情況很奇怪。你有沒有試過玩學習率?也許減少它。我遇到了奇怪的損失值,並且降低了學習速度對我的幫助。

+0

雖然這可能是有用的反饋,但我認爲它會更有意義,而不是回答。 –