一、训练时loss不下降问题
1、训练集loss不下降
1.1 模型结构和特征工程存在问题
1.2 权重初始化方案有问题
1.3 正则化过度
1.4 选择合适的激活函数、损失函数
1.5 选择合适的优化器和学习速率
1.6 训练时间不足
1.7 模型训练遇到瓶颈
1.8 batch size过大
1.9 数据集未打乱
1.10 数据集有问题
1.11 未进行归一化
1.12 特征工程中对数据特征的选取有问题
2、测试集loss不下降
2.1 应用场景不一致
2.2 噪声问题
3、验证集loss不下降
3.1 适当的正则化和降维
3.2 适当降低模型的规模
3.3 获取更多的数据集
3.4 对数据集做扰动和扩增
常见原因:
1.如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率,也可能是batch size过大。
2.如果当前的网络是类似于RNN的循环神经网络的话,出现NaN可能是因为梯度爆炸的原因,一个…
3.可能用0作为了除数;
4.可能0或者负数作为自然对数
5.需要计算loss的数组越界(尤其是自己,自定义了一个新的网络,可能出现这种情况)
6.梯度爆炸造成Loss爆炸
7.数据中出现了脏数据
解决方案:
1、数据归一化(减均值,除方差,或者加入normalization,例如BN、L2 norm等)
2、更换参数初始化方法(对于CNN,一般用xavier或者msra的初始化方法)
3、减小学习率、减小batch size
4、加入gradient clipping
5、数据中出现脏数据,通过设置batch_size = 1,shuffle = False,一步一步地将sample定位到了所有可能的脏数据,删掉。
当然也可能是batchNorm原因
当然上述现象出现的原因大部分在当我们使用model.eval()(Pytorch)之后发生。如果你在预测阶段也将模型model设置为model.train(True),那么问题可能就不会出现。
本文探讨了在训练神经网络时遇到的训练集、测试集和验证集loss不下降的问题,分析了可能的原因并提出了解决方案。此外,还涉及epoch内损失出现NaN的现象,包括学习率过高、梯度爆炸等因素,并给出相应的解决策略。最后讨论了自适应学习率设置的重要性。
1492

被折叠的 条评论
为什么被折叠?



