![15394afde4a4101db2143ae843383e79.png](https://i-blog.csdnimg.cn/blog_migrate/07ca8a66bf58d9cc60d8f7371eaf07c1.jpeg)
训练网络时,最怕出现NAN的情况。运行出现问题了,才知道我们构建的模型是存在一定的问题不是?为此介绍下出现NAN的原因及解决方案:
一.原因
一般来说,出现NAN有以下几种情况:
1.如果在迭代的100轮以内,出现NAN,一般情况下的原因是因为你的学习率过高,需要降低学习率。可以不断降低学习率直至不出现NAN为止,一般来说低于现有学习率1-10倍即可。
2.在设计网络时,添加了dropout层,这也是导致loss出现NAN的原因。为此去掉dropout层即可。
3.如果当前的网络是类似于RNN的循环神经网络的话,出现NAN可能是因为梯度爆炸的原因,一个有效的方式是增加“gradient clipping”(梯度截断来解决)
4.可能用0作为了除数;
5.可能0或者负数作为自然对数
6.需要计算loss的数组越界(尤其是自己,自定义了一个新的网络,可能出现这种情况)
7.在某些涉及指数计算,可能最后算得值为INF(无穷)(比如不做其他处理的softmax中分子分母需要计算exp(x),值过大,最后可能为INF/INF,得到NaN,此时你要确认你使用的softmax中在计算e