2017-07-19 143 views
0

最近,我一直試圖複製this post的結果,但使用TensorFlow而不是Keras。但是,我的模型損失沒有收斂爲in the code provided。我小心使用作者使用的相同參數,即使那些未明確顯示的參數。我的完整代碼可以看到hereTensorflow - 損失不會減少

我已經嘗試了不同的學習率,優化器和批量大小,但這些並不會影響結果。

我在StackOverflow和StackExchange中發現了一堆與此問題有關的其他問題,但其中大多數都沒有答案。然而,有答案的問題並沒有幫助。

我使用TensorFlow 1.1.0的Python 3.6和Windows 10

最奇怪的是,我們有相同的數據庫和相同的模型,只是不同的框架。因此,它不應該給出完全不同的行爲。有沒有人對我應該嘗試解決這個問題的建議有什麼建議?

+0

簡短評論:您應該使用「'is_training'」在測試期間禁用丟失。此外,似乎你的網絡總是輸出零,所以梯度是毫無價值的。你有沒有嘗試禁用丟失? –

+0

爲什麼你的損失均方誤差,爲什麼tanh是你稱爲「logits」的東西的激活? –

+0

你是對的,@JonasAdler,因爲「is_training」的默認值是False,所以我沒有使用丟失,所以我的輸出沒有變化。我試圖將其設定爲現在,但問題仍然存在。 –

回答

4

我跑你的代碼基本上沒有修改,但我看了你的tf_labels和logits的形狀,他們是不一樣的。 logits的形狀(batch_size,1,1,1)(因爲您使用的是1x1卷積過濾器),而tf_labels的形狀是(batch_size,1)。我改變了你的損失線

loss = tf.reduce_mean(tf.squared_difference(tf.squeeze(tf_labels), 
      tf.squeeze(logits))) 

和損失減少了每個時代。

+0

非常感謝@Ryan。有效!爲了儘量減少使用其他已知方法造成的損失,我失去了最近2周的時間,但錯誤與完全不同的事情有關。感謝您向我展示了爲什麼發生了。只要我有足夠的聲望點,我會盡快給您答覆。 –