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

# 听说你的模型损失是NaN

时间:2017-12-22 23:55:41      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:pytho   输入   解决方法   无法   log   value   结果   gpo   最好   

# 听说你的模型损失是NaN

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

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

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

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

```python
tf.log(x + 1e-10)
```

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

方法2:利用clip,或者maximum

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

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

```python
tf.nn.log_softmax(x)
```

 

# 听说你的模型损失是NaN

标签:pytho   输入   解决方法   无法   log   value   结果   gpo   最好   

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

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