前言
最近師弟在實際業務中訓練深度學習模型時遇到個問題:在大樣本訓練模型時候的loss爲nan,嘗試了各種方法也沒有什麼起色,最終一起分析了一番擬確定了原因,這邊就分享下可能的原因可供分析調整~
原因
1.模型問題
-
網絡結構設計問題
通過弱化場景,簡化樣本的方式去檢查是否爲網絡的問題
-
損失函數設置不合理
-
激活函數選擇不當
-
參數初始化問題
2.數據問題
-
數據需歸一化
- 減均值
- 除方差
- 加入normalization(BN\L2 norm等)
-
數據標籤不在[0, num_classes)範圍內
-
訓練樣本存在髒數據
這個是和師弟最終確定的原因,因爲在實際業務中的真實數據需要耗費較多的時間去處理,不像open dataset那樣已經幫你處理的乾乾淨淨,所以如上述的方法一一檢查過了還是沒有成效的話,一定要好好地檢查下數據。
3.訓練問題
loss爲nan的說明loss發散,這個時候需要考慮下梯度爆炸的可能,那麼相應的解法方式如下:
- 調小學習率lr
- 調小batch size
- 加入gradient clipping