解決pytorch 交叉熵損失輸出為負數(shù)的問題
網(wǎng)絡訓練中,loss曲線非常奇怪

交叉熵怎么會有負數(shù)。
經(jīng)過排查,交叉熵不是有個負對數(shù)嗎,當網(wǎng)絡輸出的概率是0-1時,正數(shù)??僧斁W(wǎng)絡輸出大于1的數(shù),就有可能變成負數(shù)。
所以加上一行就行了
out1 = F.softmax(out1, dim=1)
補充知識:在pytorch框架下,訓練model過程中,loss=nan問題時該怎么解決?
當我在UCF-101數(shù)據(jù)集訓練alexnet時,epoch設為100,跑到三十多個epoch時,出現(xiàn)了loss=nan問題,當時是一臉懵逼,在查閱資料后,我通過減小學習率解決了問題,現(xiàn)總結一下出現(xiàn)這個問題的可能原因及解決方法:
1. 減小整體學習率。學習率比較大的時候,參數(shù)可能over shoot了,結果就是找不到極小值點;減小學習率可以讓參數(shù)朝著極值點前進;
2. 改變網(wǎng)絡寬度。有可能是網(wǎng)絡后面的層參數(shù)更新異常,增加后面層的寬度試試;
3. 改變層的學習率。每個層都可以設置學習率,可以嘗試減小后面層的學習率試試;
4. 數(shù)據(jù)歸一化(減均值,除方差,或者加入normalization,例如BN、L2 norm等);
5. 加入gradient clipping;
6 輸入數(shù)據(jù)含有臟數(shù)據(jù),即NaN,一般當使用實際業(yè)務的真實數(shù)據(jù)時,容易出現(xiàn)臟數(shù)據(jù)。
以上這篇解決pytorch 交叉熵損失輸出為負數(shù)的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python中Playwright?與?pyunit?結合使用詳解
這篇文章主要介紹了Python中Playwright?與?pyunit?結合使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
Python 數(shù)據(jù)處理更容易的12個輔助函數(shù)總結
Python的產(chǎn)生似乎就是專門用來處理數(shù)據(jù)的,順理成章的成為大數(shù)據(jù)的主流語言,本文介紹十二個函數(shù)輔助你更容易更便捷的用Python進行數(shù)據(jù)處理2021-11-11
Python機器學習性能度量利用鳶尾花數(shù)據(jù)繪制P-R曲線
這篇文章主要為大家介紹了Python機器學習性能度量利用鳶尾花數(shù)據(jù)繪制P-R曲線示例學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
TensorFlow人工智能學習創(chuàng)建數(shù)據(jù)實現(xiàn)示例詳解
這篇文章主要為大家介紹了TensorFlow人工智能學習創(chuàng)建數(shù)據(jù)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11

