训练过程中Loss函数出现Nan的可能原因

综合我做过的一些实验,记录一下实验过程中Loss出现Nan的一些可能原因:

  1. 最简单的,学习率过大
    BTW, 学习率过大还可能导致收敛到一个定值之前实验室的师姐拿云图做DNI分类的结果最后都收敛到同一个数值,结果我后来一看也是学习率过大导致的。

    其中的原因我猜测是使用了ReLU激活函数以后,某一步跨入了一个点,使得出现了dead neuron的现象,然后前面的参数全部不更新,导致最后的结果变成了定值。所以ReLU的学习率一般不会很大。

  2. 坏样本的加入
    比如一个样本的全是0,你减去均值除以方差以后就变成了nan,你自己不会发现,进入神经网络以后会使得突然loss也变nan了(因为反传是需要用到的)

    参考

  3. 你自己定义的某个Tensor没有初始化
    比如代码中实现一些简单的weight matrix的时候,你直接使用torch.FloatTensor作为训练参数,但是FloatTensor本身的初始化是不适用于深度神经网络的,此时最好用nn.init.kaiming_normal()之类的函数初始化一下。

你可能感兴趣的:(深度学习,深度学习,神经网络,人工智能)