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
也可以在损失中加一个很小的正值