Machine learning keras模型中的NaN损失

Machine learning keras模型中的NaN损失,machine-learning,keras,neural-network,deep-learning,Machine Learning,Keras,Neural Network,Deep Learning,我有大约10万个“数据批次”的顺序数据,我正在运行一个相当复杂的循环模型(120千个参数)。经过一段时间(看起来很随机),损失变成了nan。我尝试了以下方法 检查了非数字的数据,结果是正确的 梯度将其剪裁为标准1 约束每个层的参数 降低了学习速率并添加到RMSProp中的epsilon中,但是在某个点之后,我仍然得到NaN 还有什么我可以尝试调试的吗?我不使用循环网络,但是在我自己与CNN的工作中,当训练批量很小时,我遇到了零星的NaN问题。尝试扩大批量大小 没有代码,我只能给出一个非常笼统的答

我有大约10万个“数据批次”的顺序数据,我正在运行一个相当复杂的循环模型(120千个参数)。经过一段时间(看起来很随机),损失变成了nan。我尝试了以下方法

  • 检查了非数字的数据,结果是正确的
  • 梯度将其剪裁为标准1
  • 约束每个层的参数
  • 降低了学习速率并添加到RMSProp中的epsilon中,但是在某个点之后,我仍然得到NaN

  • 还有什么我可以尝试调试的吗?

    我不使用循环网络,但是在我自己与CNN的工作中,当训练批量很小时,我遇到了零星的NaN问题。尝试扩大批量大小

    没有代码,我只能给出一个非常笼统的答案:

    当您执行以下操作时,可能会发生NaN:

    • 除以0
    • 太小数字的对数
    • 负数
    查看优化指标,看看在您的情况下会发生什么。寻找(绝对)数字可能非常大或非常小的点。通常,添加一个小常量可以解决问题

    还有许多其他情况可能与您无关:

    • [-1,1]
    • 浮点('inf')/浮点('inf'))
    • 0*浮点('inf')

    另请参见:我的

    指南为我们展示了您的模型的代码。您能解释一下小批量的NaN是如何发生的,以及大批量是如何防止这种情况发生的吗?我怀疑是梯度爆炸造成的,尽管我没有使用RNN,但我知道它们很容易受到振荡的影响。在我的例子中,我使用了一个不寻常的激活函数,我不确定斜率是否有上界。如果生成了一个不走运的批,我相信梯度下降算法有可能输出一个如此大的步长,以至于错误函数会溢出。我的模型可以可靠地训练,前提是批量大小至少为16。我得到了8个批次的偶发NaN,还有不少批次是4个。但是你检查过所有这些东西吗?您的架构是什么(包括损失功能)?我感到非常惊讶的是,批量大小可能与梯度爆炸有关,也可能是梯度爆炸的解决方案。通常,您会使用批标准化或渐变剪裁来避免该问题。