1.模型不收敛问题排查
1.1情况
loss不收敛主要有以下两种情况:
- loss一直在震荡
- loss下降一点后不再下降到理想水平,而验证集上的表现保持不变。
1.2排查方法
- 排查方式:保持batchsize不变,查看是否有梯度回传,代码如下
-
for name, parms in model.named_parameters(): print('-->name:', name, '-->grad_requirs:', parms.requires_grad, '--weight', torch.mean(parms.data), ' -->grad_value:', torch.mean(parms.grad))
-
2.模型不收敛的主要原因
2.1LearningRate过大
LearningRate设置过大,会带来跑飞的问题。可能性最大的原因是:Relu激活函数与Softmax(带有exp的loss函数)同时使用。
为什么同时使用两种函数产生loss跑飞问题?
- 当第n次训练传到最后一层的时候,某一节点激活过度比如100,那么exp(100)=Inf,发生溢出。
- 溢出后,反向传播BP后所有的weight就会变成NAN并从此以后一直保持NAN,于是Loss九飞起来了
2.2数据集过大
- 网络不收敛一般是由于样本的信息量太大导致网络不足以fit住整个样本空间。
- 一般小的数据集不会产生不收敛的问题,样本少只可能带来过拟合的问题。
2.3模型过大
如果数据太少尽量缩小模型复杂度。考虑减少层数或者减少kernel number。
2.模型Loss下降情况分析
神经网络训练与注意点
- train loss 不断下降,test loss不断下降,说明网络仍在学习;
- train loss 不断下降,test loss趋于不变,说明网络过拟合;
- train loss 趋于不变,test loss不断下降,说明数据集100%有问题;
- train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;
- train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。