前言
最近师弟在实际业务中训练深度学习模型时遇到个问题:在大样本训练模型时候的loss为nan,尝试了各种方法也没有什么起色,最终一起分析了一番拟确定了原因,这边就分享下可能的原因可供分析调整~
原因
1.模型问题
-
网络结构设计问题
通过弱化场景,简化样本的方式去检查是否为网络的问题
-
损失函数设置不合理
-
激活函数选择不当
-
参数初始化问题
2.数据问题
-
数据需归一化
- 减均值
- 除方差
- 加入normalization(BN\L2 norm等)
-
数据标签不在[0, num_classes)范围内
-
训练样本存在脏数据
这个是和师弟最终确定的原因,因为在实际业务中的真实数据需要耗费较多的时间去处理,不像open dataset那样已经帮你处理的干干净净,所以如上述的方法一一检查过了还是没有成效的话,一定要好好地检查下数据。
3.训练问题
loss为nan的说明loss发散,这个时候需要考虑下梯度爆炸的可能,那么相应的解法方式如下:
- 调小学习率lr
- 调小batch size
- 加入gradient clipping