訓練深度學習網絡時候,出現Nan 或者 震盪


出現Nan :

原因有多種,需要注意的是,要保證訓練數據中沒有臟數據,如果在training sample中出現了臟數據,那么在固定的迭代次數段,都會loss突然變nan,導致acc驟降,慢慢變0

https://www.zhihu.com/question/49346370

 

震盪 :

分析原因:  1:訓練的batch_size太小

 

1.  當數據量足夠大的時候可以適當的減小batch_size,由於數據量太大,內存不夠。但盲目減少會導致無法收斂,batch_size=1時為在線學習。

2.  batch的選擇,首先決定的是下降方向,如果數據集比較小,則完全可以采用全數據集的形式。這樣做的好處有兩點,

    1)全數據集的方向能夠更好的代表樣本總體,確定其極值所在。

    2)由於不同權重的梯度值差別巨大,因此選取一個全局的學習率很困難。

3.  增大batchsize的好處有三點:

    1)內存的利用率提高了,大矩陣乘法的並行化效率提高。

    2)跑完一次epoch(全數據集)所需迭代次數減少,對於相同的數據量的處理速度進一步加快。

    3)一定范圍內,batchsize越大,其確定的下降方向就越准,引起訓練震盪越小。

4.  盲目增大的壞處:

    1)當數據集太大時,內存撐不住。

    2)batchsize增大到一定的程度,其確定的下降方向已經基本不再變化。

 

 總結:

        1)batch數太小,而類別又比較多的時候,可能會導致loss函數震盪而不收斂,尤其是在你的網絡比較復雜的時候。

        2)隨着batchsize增大,處理相同的數據量的速度越快。

        3)隨着batchsize增大,達到相同精度所需要的epoch數量越來越多。

        4)由於上述兩種因素的矛盾, Batch_Size 增大到某個時候,達到時間上的最優。

        5)過大的batchsize的結果是網絡很容易收斂到一些不好的局部最優點。同樣太小的batch也存在一些問題,比如訓練速度很慢,訓練不容易收斂等。

        6)具體的batch size的選取和訓練集的樣本數目相關

 

分析原因:  2:數據輸入不對

 

1:數據輸入不對包括數據的格式不是網絡模型指定的格式,導致訓練的時候網絡學習的數據不是想要的; 此時會出現loss曲線震盪;

解決辦法:檢查數據輸入格式,數據輸入的路徑;

 

 

分析原因:  3:訓練腳本里面的 路徑是否配置正確

 

1:當腳本中的train.bin的路徑或者模型參數的路徑配置不對時,會導致訓練模型結果不對.

解決辦法:檢查腳本配置是否正確.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM