听说你的模型损失是NaN

Posted 狂徒归来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了听说你的模型损失是NaN相关的知识,希望对你有一定的参考价值。

听说你的模型损失是NaN

有时候,模型跑着跑着,损失就莫名变NaN了。不过,经验告诉我们,大部分NaN主要是因为除数是0或者传给log的数值不大于0。下面说说是log出NaN的几种常见解决方法。

毕竟, 计算机的是无法表示所有实数的,尽管有些函数得出的结果只能无限近似0,但是由于计算机精度问题,最后的结果往往被表示为0。比如sigmoid函数,取值在0到1之间。

下面介绍TensorFlow的解决log出NaN的常见方法:

方法1:在保证传给log的数值不会有负数的情况下,可以直接加一个比较小的常数

tf.log(x + 1e-10)

这种方法不是很推荐,因为有时候需要log的输出作为别的输入。

方法2:利用clip,或者maximum

tf.log(tf.maximum(x, 1e-15))
tf.log(tf.clip_by_value(x, 1e-15, np.inf))

方法3:如果你计算的是log loss,那么最好的推荐是利用TensorFlow的内建log损失函数

tf.nn.log_softmax(x)

以上是关于听说你的模型损失是NaN的主要内容,如果未能解决你的问题,请参考以下文章

张量流 LSTM 模型中的 NaN 损失

从表格数据训练深度学习模型时,损失总是 nan

来自 Keras 序列模型训练的 Nan 损失

Tensorflow:损失变成'NaN'

训练CNN模型图像分类期间的tensorflow NaN损失

Nan在使用RMSE/RMSLE损失函数训练模型时