2017-07-26 26 views
3

我正在訓練一個網絡,該網絡有多個損失,並使用生成器創建數據並將其饋入我的網絡。keras損失在新紀元開始時隨機跳到零

我檢查過數據的結構,它看起來一般都很好,它也像預期的那樣大部分時間訓練,但是在幾乎每一次的隨機時代,每次預測的訓練損失突然跳躍從說

# End of epoch 3 
loss: 2.8845 

# Beginning of epoch 4 
loss: 1.1921e-07 

我認爲它可能是數據,但是,從我可以告訴的數據一般是罰款,因爲這將在隨機時代發生它更可疑(可能是因爲隨機da ta點在SGD中選擇?),但會在整個剩餘的訓練中持續。就像在第3時段一樣,訓練損失減少到1.1921e-07,那麼它將在第4時段,第5時段等以這種方式繼續。

但是,有些時候它達到時期5並且還沒有完成,那麼可能會在第6個或第7個時間點完成。

是否有任何可能導致此問題的數據之外的可行原因?難道它甚至會發生一些fudgy數據點導致這麼快?

感謝

編輯:

結果:畢竟這

300/300 [==============================] - 339s - loss: 3.2912 - loss_1: 1.8683 - loss_2: 9.1352 - loss_3: 5.9845 - 
val_loss: 1.1921e-07 - val_loss_1: 1.1921e-07 - val_loss_2: 1.1921e-07 - val_loss_3: 1.1921e-07 

下一個時代有trainig損失1.1921e-07

+1

Keras將損失顯示爲當前時期的平均值。這意味着如果優化器在損失領域發現「懸崖」,直到下一個時代開始纔會明顯。也可能在某個時刻,你的模型會很好地預測一個時代的第一批。你可以嘗試在每個時代洗牌數據。如果沒有查看某些代碼,很難說是正確的還是錯誤的。無論如何,如果你還沒有使用它,我會鼓勵你使用驗證集。 –

+0

@ManoloSantos我明白了,謝謝你的洞察力。所以你說這可能是因爲如果它不斷髮現「壞數據」,例如空的數據(我認爲它必須是爲了使它在所有預測中都能產生零損失),那麼損失可能會發生。 我目前正在從數據集中隨機生成數據,所以預測的順序不應該是一個問題?我會做進一步的測試並讓你知道。 – tryingtolearn

+0

接近0的損失並不意味着您有「不良數據」,這意味着該模型非常有信心預測您的數據。 (這可能意味着它過度配合和記憶它,這就是爲什麼我建議你使用驗證集,以放棄這種可能性)。 –

回答

0

不能完全確定是否令人滿意,這是作爲一個答案,但我的研究結果似乎表明,使用多個categorical_rospecttropy損失一起似乎導致超級不穩定的網絡?將其替換爲其他損失函數可以解決數據保持不變的問題。