码迷,mamicode.com
首页 > 其他好文 > 详细

听说你的模型损失是NaN

时间:2017-12-22 23:54:15      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:loss   pytho   无法   模型   介绍   maximum   down   表示   之间   

听说你的模型损失是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

标签:loss   pytho   无法   模型   介绍   maximum   down   表示   之间   

原文地址:http://www.cnblogs.com/crackpotisback/p/8087831.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!