训练网络中出现loss等于Nan的情况几种思路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了训练网络中出现loss等于Nan的情况几种思路相关的知识,希望对你有一定的参考价值。

参考技术A 在使用机器学习训练模型时,发现损失函数竟然是Nan,我们就要从一下几个方面来考虑(由重要到不重要排列):
1.如果在迭代的100轮以内,出现Nan,一般情况下的原因是因为你的学习率过高,需要降低学习率。
2.训练数据中有脏数据。(所谓脏数据,就是很离谱的数据,或者完全不正确的数据,会完全带跑模型的走向;或者就是数据中的某个取值是0或者是无穷大,导致网络无法计算)
3.可能用0作为了除数
4.可能0或者负数作为自然对数

mmdetection中出现 loss为 nan的情况

参考技术A

1 。 mmdet中的 core/ evalution/ classnames.py 中的类别没修改
2 。mmdet 中的 datasets/ voc.py 中的类别没修改
3 。config/ base /models 中基础模型的 num_classes 没有修改正确
4 。config/ faster_rcnn.../...py 中 datasets的路径 没有修改

总结:
如果nan的情况是间断性出现的,比如前面几个 batch 的loss正常下降,突然有几个batch的loss变成nan ,然后loss又正常了,就是前面5中情况中的一种,大概率是情况5.
如果nan的情况不是间断性出现的,比如前面几个batch 的loss正常下降,突然持续变成nan,不恢复正常,则有可能是情况6,在 schedule1x.py 中把learning_rate 调至它的0.1倍。

以上是关于训练网络中出现loss等于Nan的情况几种思路的主要内容,如果未能解决你的问题,请参考以下文章

mmdetection中出现 loss为 nan的情况

机器学习技巧-训练过程中,loss参数出现NAN怎么解决?解决方案汇总?

pytorch训练时前一次迭代的loss正常后一次迭代却报nan

keras训练cnn模型时loss为nan

Keras - 整个训练过程中的 Loss Nan 和 0.333 准确率

在PyTorch中训练神经网络时,损失总是“为”