0

在我的 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,损失也会变为 nan

3. 读出层:
softmax

4:损失函数:
tf.reduce_mean(-tf.reduce_sum(_lables * tf.log(_logist), reduction_indices=[1]))

5.优化器:
tf.train.AdamOptimizer

learning_rate = 0.0005
**即使 learning_rate = 0,损失也会变成 nan

4

2 回答 2

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”的完整代码示例。

于 2016-04-19T09:49:55.903 回答
1

到目前为止,我遇到了两种nan可能导致的情况:

  • 数字变得太大(也许你正在执行square一个数字,结果太大)
  • 或者存在无效输入(某些函数喜欢sqrt并且log不接受负输入,所以它们会返回nan
于 2018-03-20T04:36:04.993 回答