在tensorflow上用自己写的DNN跑mnist数据集,跑着跑着,loss变成了nan,
在8000轮的时候,测过accuracy有97%,但是跑到10000多轮,loss变成了nan。
把weights打印出来一看,也全部都是nan了。
最后stackoverflow解决了问题:
是因为cross entropy写得有风险:
这样写有风险,因为y_pred有可能出现0
cross_entropy = -tf.reduce_sum(y_*tf.log(y_pred))
保险的写法是这样的:
cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y_conv,1e-10,1.0)))
外面加不加tf.reduce_mean()
随意。
另外,在查的过程中,发现造成loss变成nan的原因有很多很多,如果一开始的初始化没有弄好,容易造成weights变成nan。
参考资料: