在我的 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,结果太大) 或者存在无效输入(sqrtlog 等某些函数不接受负输入,因此它们会返回 nan

【讨论】:

以上是关于在我的 tensorflow CNN 的第一轮,损失变成了 NAN的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow2深度学习实战(十七):目标检测算法 Faster R-CNN 实战

TensorFlow2深度学习实战(十六):目标检测算法Faster R-CNN解析

TensorFlow2深度学习实战(十六):目标检测算法Faster R-CNN解析

CNN训练错误执行Tensorflow Python以识别狗和猫的图像

TensorFlow框架之CNN卷积神经网络详解

训练CNN模型图像分类期间的tensorflow NaN损失