2017-08-25 114 views
0

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

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) 

所以型号1返回形状(6,480,640,1)的张量(批次大小为6)和y占位符是(6,480,640,1)。如何解决损失张量得到的NaN值?

回答

0

为什么你正在南有些最初的想法:

  1. 检查你的学习速度,尽量将其降低到一些较小的值,如1e-5,看看它是如何去。这可能是因为你的学习速度比较大。
  2. 剪下梯度tf.clip_by_value以防止过于激进的更新。
  3. 什么是您正在使用的激活功能?如果您有11层,您可能需要将tf.nn.relu作为激活功能。
  4. 您的计算图表可能有问题,您可以通过将tf.check_numerics添加到每个图层来测试它,并查看NaN是否来自特定图层。