DNN跑mnist,loss变成了nan

在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。

参考资料:

https://stackoverflow.com/questions/33712178/tensorflow-nan-bug?newreg=c7e31a867765444280ba3ca50b657a07

https://stackoverflow.com/questions/37448557/why-are-my-tensorflow-network-weights-and-costs-nan-when-i-use-relu-activations

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容