出現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的路徑或者模型參數的路徑配置不對時,會導致訓練模型結果不對.
解決辦法:檢查腳本配置是否正確.