今天帮妹子调试tensorflow的程序,遇到了nan的问题,找了好久终于解决,也没辜负妹子。
最终找到了问题是tf.sqrt, 引自stackoverflow, Why is my loss function returning nan?
解释为:
It was coming from the fact that x was approaching a tensor with all zeros for entries. This was making the derivative of sigma wrt x a NaN. The solution was to add a small value to that quantity.
也就是tf.sqrt(x), x为0导致的nan的问题。 当x为0, 导致导数为NaN。
解决方案: 加一个极小量避免x为0,也就是:
tf.sqrt(x+1e-8)
再给大家推荐一下知乎相似问题,很有借鉴意义。为什么用tensorflow训练网络,出现了loss=nan,accuracy总是一个固定值?

本文分享了在使用TensorFlow进行程序调试时遇到的NaN问题及其解决方案。问题源于tf.sqrt函数处理接近全零的张量时导致的导数为NaN。解决办法是在平方根操作前加一个极小值,避免x为零的情况。此外,还推荐了一个知乎上的类似问题讨论,对于理解为何在训练网络时出现loss=nan和固定accuracy值的情况很有帮助。
658

被折叠的 条评论
为什么被折叠?



