在我的 tensorflow CNN 的第一轮步骤中,损失变成了 NAN

Loss turns to be NAN at the first round step in my tensorflow CNN

在我的 tensorflow CNN 的第一轮步骤中损失变成了 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

**即使 dropout 为 0.0,loss 也变为 nan

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

由于我们没有完整的源代码,所以很难看出问题所在。但是,您可以尝试在成本函数中使用 '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' 找到完整的代码示例

到目前为止,我遇到了两个 nan 可能导致结果的案例:

  • 数字太大(也许您正在对一个数字执行 square,结果太大)
  • 或者存在无效输入(某些函数如 sqrtlog 不接受负输入,因此它们会 return nan