Tensorflow损失值为Nan with sparse_softmax_cross_entropy_with_logits()

时间:2017-08-25 22:03:49

标签: tensorflow

我正在训练一个11层完全卷积网络。输入是图像480x640x1,输出标签也是图像480x640x1。对于培训,我使用的是sparse_softmax_cross_entropy_with_logits()。但我得到的损失价值是NaN。我附上了我的代码片段以供参考。

 x=tf.placeholder(tf.float32,(None,480,640,1))
 y=tf.placeholder(tf.int32,(None,480,640,1))
 logits=Model1(x)
 loss=tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=tf.squeeze(y,squeeze_dims=[3]))) 
 optimizer=tf.train.AdamOptimizer(learning_rate=lr)
 Trainables=optimizer.minimize(loss)

因此,Model1返回一个形状的张量(6,480,640,1)(批量大小为6),y占位符为(6,480,640,1)。如何解决损失张量得到的NaN值?

1 个答案:

答案 0 :(得分:0)

关于你为何得到NaN的一些初步想法:

  1. 检查您的学习率,尝试将其降低到某个较小的值,例如1e-5,看看它是怎么回事。这可能是因为你的学习率相对较高。
  2. tf.clip_by_value剪辑渐变以防止过于激进的更新。
  3. 您使用的激活功能是什么?如果您有11层,则可能需要将tf.nn.relu作为激活功能。
  4. 您的计算图可能有问题,您可以通过向每个图层添加tf.check_numerics来测试,并查看NaN是否来自特定图层。