深度学习在训练时常会出现NAN值,我们最先看到的肯定是Loss=NAN。但是实质是数据里有无穷值,如下图:
在这里插入图片描述
遇到这种情况怎么办,我总结了以下几点容易出现问题的地方:

  1. 主要关注有没有一些操作是让某些数成为无穷值。比如 b = log a,a是一个为0的数,那么就容易使得 b 为无穷值(NAN)。或者c = a/b,b=0,那么 c 就成为无穷值(NAN)。但是我们在训练初始时会发现,特征一般都是不为0的,那么无穷值也不容易出现。
  2. 那么神经网络当中什么操作可以使得特征的值变为0呢?对,就是激活函数。比如我们最常用的 ReLu 激活函数,如下图,该激活函数可以使得负值的特征为0。但是在代码里有些操作会导致出现很多负值,这就使得这些负值都变为了0,这时候,如果你要计算L2-范数,那么这个特征的范数为0。如果你接下来的操作是将这个特征的范数放在分母上,那么很可能会出现NAN值的问题。
    在这里插入图片描述
    解决方式:
  3. 加入极小值 k=1e-6。这个加入的位置取决于你的操作。
  4. 换一种激活函数,将ReLu激活函数换成对负数值也友好的PReLu激活函数。如下图:
    在这里插入图片描述

声明:上述图引用为以下链接
https://blog.csdn.net/weixin_41929524/article/details/112253138
https://blog.csdn.net/qq_50001789/article/details/128974253

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐