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