在使用keras 訓練網絡時,雖然網絡設計好了,數據也加載進去了,但是發現訓練時候總是出現各種各種稀奇古怪的問題。我在這裏就列舉幾個常見的問題。供大家參考一下。當val_loss曲線或val_acc曲線震盪不平滑時的原因可能如下:
1 學習率可能太大
2 batch size太小
3 樣本分佈不均勻
4 缺少加入正則化
大家可以在這幾個方面去進行調整,一步一步的調整,先調整學習率,然後再調整batch size,一般這兩種情況比較多,很容易就可以解決。如果還不行,再考慮一下val 集的數據樣本和訓練集的樣本是不是同樣的分佈。從這幾方面進行考慮。
另外大家要學會從loss和acc的變化來判斷網絡學習的情況。可能的幾種情況如下。
- train loss 不斷下降,test loss不斷下降,說明網絡仍在學習;
- train loss 不斷下降,test loss趨於不變,說明網絡過擬合;
- train loss 趨於不變,test loss不斷下降,說明數據集100%有問題;
- train loss 趨於不變,test loss趨於不變,說明學習遇到瓶頸,需要減小學習率或批量數目;
- train loss 不斷上升,test loss不斷上升,說明網絡結構設計不當,訓練超參數設置不當,數據集經過清洗等問題。
另外當訓練時出現NAN 時大家看看自己的網絡是不是設計的有問題,網絡設計的是否過大了,導致梯度傳遞時丟失了。