在我的 tensorflow CNN 的第一轮,损失变成了 NAN
Posted
技术标签:
【中文标题】在我的 tensorflow CNN 的第一轮,损失变成了 NAN【英文标题】:Loss turns to be NAN at the first round step in my tensorflow CNN 【发布时间】:2016-08-11 02:58:06 【问题描述】:在我的 tensorflow CNN 的第一轮中,Loss 变成了 NAN。
1.网络:
3个隐藏层(2个卷积层+1个隐藏全连接层)+读出层。
2。 3 个隐藏层:
a) 权重 :W = tf.Variable(tf.truncated_normal(wt,stddev=0.1,name='wights' ))
b) 偏见 :b = tf.Variable( tf.fill([W.get_shape().as_list()[-1] ],0.9),name = 'biases' )
c) 激活:ReLu
d) 辍学:0.6
**loss 变为 nan 即使 dropout 为 0.0
3.读出层:softmax
4:损失函数:tf.reduce_mean(-tf.reduce_sum(_lables * tf.log(_logist), reduction_indices=[1]))
5.optimizer:tf.train.AdamOptimizer
learning_rate = 0.0005
**即使 learning_rate = 0,损失也会变成 nan
【问题讨论】:
【参考方案1】:由于我们没有完整的源代码,因此很难看出问题所在。但是,您可以尝试在成本函数中使用“tf.nn.softmax_cross_entropy_with_logits”。例如:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(predictions, labels))
您可以在https://github.com/nlintz/TensorFlow-Tutorials 找到使用“tf.nn.softmax_cross_entropy_with_logits”的完整代码示例。
【讨论】:
谢谢,它通过两个步骤修复:1.使用 xavier_initializer 作为权重。 2. 成本 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(预测,标签) @user6223071 太棒了!如果您不介意,您还可以将 xavier_initializer 部分分享给其他人吗? xavier 在 tensorflow api v8.0 中实现。这里是 [tensorflow.org/versions/r0.8/api_docs/python/…【参考方案2】:到目前为止,我已经遇到了两种可能导致nan
的情况:
square
,结果太大)
或者存在无效输入(sqrt
和 log
等某些函数不接受负输入,因此它们会返回 nan
)
【讨论】:
以上是关于在我的 tensorflow CNN 的第一轮,损失变成了 NAN的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow2深度学习实战(十七):目标检测算法 Faster R-CNN 实战
TensorFlow2深度学习实战(十六):目标检测算法Faster R-CNN解析
TensorFlow2深度学习实战(十六):目标检测算法Faster R-CNN解析