歡迎您光臨本站 註冊首頁

解決pytorch 交叉熵損失輸出為負數的問題

←手機掃碼閱讀     niceskyabc @ 2020-07-08 , reply:0

網絡訓練中,loss曲線非常奇怪

交叉熵怎麼會有負數。

經過排查,交叉熵不是有個負對數嗎,當網絡輸出的概率是0-1時,正數。可當網絡輸出大於1的數,就有可能變成負數。

所以加上一行就行了

out1 = F.softmax(out1, dim=1)

補充知識:在pytorch框架下,訓練model過程中,loss=nan問題時該怎麼解決?

當我在UCF-101數據集訓練alexnet時,epoch設為100,跑到三十多個epoch時,出現了loss=nan問題,當時是一臉懵逼,在查閱資料後,我通過減小學習率解決了問題,現總結一下出現這個問題的可能原因及解決方法:

1. 減小整體學習率。學習率比較大的時候,參數可能over shoot了,結果就是找不到極小值點;減小學習率可以讓參數朝著極值點前進;

2. 改變網絡寬度。有可能是網絡後面的層參數更新異常,增加後面層的寬度試試;

3. 改變層的學習率。每個層都可以設置學習率,可以嘗試減小後面層的學習率試試;

4. 數據歸一化(減均值,除方差,或者加入normalization,例如BN、L2 norm等);

5. 加入gradient clipping;

6 輸入數據含有髒數據,即NaN,一般當使用實際業務的真實數據時,容易出現髒數據。


[niceskyabc ] 解決pytorch 交叉熵損失輸出為負數的問題已經有244次圍觀

http://coctec.com/docs/python/shhow-post-241813.html