tensorflow 训练网络loss突然出现nan的情况

1、问题描述:开始训练一切都是那么的平静,很正常!

  突然loss变为nan,瞬间懵逼!

2、在网上看了一些解答,可能是梯度爆炸,可能是有关于0的计算。然后我觉得可能是关于0的吧,然后进行了验证。

3、验证方法:因为我使用的是softmax loss, 我直接打印每一步的输出向量中的最大值即:

print(np.max(y.eval({x:data})))

发现最大值接近1甚至有的就是1.0,可想而知,其他维度都接近0了,那么我们来看公式:

  交叉熵loss: y_ * log(y) 
  当0*log(0) 的时候, 则会出现nan。

原因如此解决办法应该很多吧!

我使用的加正则化损失,参考:https://www.jianshu.com/p/6ffd815e2d11

也可以在损失中加一个很小的正值

 

posted @ 2019-05-10 15:59  青牛梦旅行  阅读(3142)  评论(0编辑  收藏  举报