Neural network 在训练深层神经网络时,准确度突然下降

Neural network 在训练深层神经网络时,准确度突然下降,neural-network,deep-learning,mxnet,Neural Network,Deep Learning,Mxnet,我正在使用mxnet训练一个11级的图像分类器。我观察到一个奇怪的行为训练的准确率在缓慢上升,上升到39%,在下一个时期下降到9%,然后在剩下的训练中保持接近9%。 我用保存的模型重新开始训练(训练准确率为39%),保持所有其他参数不变。现在训练的准确性又在提高。这里的原因是什么?我不能理解它。用这种方法训练模型越来越困难,因为它需要我不断地看到训练精度值 学习率恒定在0.01,因为你可以看到你的后期准确度接近随机准确度。在这种情况下,有两个常见问题 你的学习率很高。试着降低它 您试图使用的错

我正在使用mxnet训练一个11级的图像分类器。我观察到一个奇怪的行为训练的准确率在缓慢上升,上升到39%,在下一个时期下降到9%,然后在剩下的训练中保持接近9%。 我用保存的模型重新开始训练(训练准确率为39%),保持所有其他参数不变。现在训练的准确性又在提高。这里的原因是什么?我不能理解它。用这种方法训练模型越来越困难,因为它需要我不断地看到训练精度值


学习率恒定在0.01,因为你可以看到你的后期准确度接近随机准确度。在这种情况下,有两个常见问题

  • 你的学习率很高。试着降低它
  • 您试图使用的错误(或熵)为您提供了NaN值。如果您试图将熵与日志函数一起使用,则必须精确地使用它们

    • 发生这种情况可能是因为0log0返回NaN

      你可以通过以下方式避免它:


      cross\u entropy=-tf.reduce\u sum(labels*tf.log(tf.clip\u by\u value(logits,1e-10,1.0))
      在神经网络的精度训练过程中,通常会有一段时间提高,然后变得更差——通常这是由过度拟合造成的。网络“变得不走运”并进入参数空间的一个不好的部分(对应于准确度的突然下降)也是很常见的——有时它可以很快从中恢复,但有时不能


      一般来说,降低你的学习率是解决这类问题的好方法。此外,设置一个学习速率计划(如),可以通过每隔几个时期降低学习速率,帮助您实现更稳定的收敛。事实上,这有时会掩盖选择初始学习率过高的错误。

      我也遇到了同样的问题。我用(y-a)^损失函数而不是交叉熵函数(因为log(0)),解决了这个问题。我希望有更好的解决方案。

      这些问题经常出现。我观察到这可能是由于以下原因之一:

    • 有东西回来了吗
    • 网络的输入并不像预期的那样——许多现代框架在某些情况下不会产生错误
    • 模型层在某些点获得不兼容的形状

    • 很可能你的学习率太高,模型在跳跃。如果不知道你的超参数学习率在0.01很难说一旦我有了类似的问题,我意外地设置了一个线性激活,并使用分类交叉熵作为成本函数。你不应该通过剪裁逻辑来限制损失来限制梯度,这实际上会在这些间隔中创建一个0的渐变,网络会被卡住。你应该直接剪裁渐变。在我的例子中(对于不同的模型),它是由大参数引起的
      NaN
      。我通过用一些合理的值来限定参数来修正它。