【问题标题】:Tensorflow semantic segmentation gives zero lossTensorFlow 语义分割带来零损失
【发布时间】:2017-12-07 04:13:28
【问题描述】:

我正在训练一个模型,用于从图像中分割机器打印的文本。图像可能还包含条形码和手写文本。地面实况图像经过处理,0 代表机器打印,1 代表剩余。我使用的是带有膨胀的 5 层 CNN,最终输出 2 张地图。

而我的损失计算如下:

def loss(logits, labels):

    logits = tf.reshape(logits, [-1, 2])
    labels = tf.reshape(labels, [-1])

    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels)
    cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')

我有一些只包含手写文本的图像,它们对应的基本事实是空白页,用 1 表示。

当我训练模型时,对于这些图像,我的损失为 0,训练准确度为 100%。它是否正确?这种损失怎么可能为零? 对于其他包含条形码或机器打印的图像,会出现一些损失,并且它们会正常收敛。

当我测试这个模型时,条形码被正确地忽略了。但它输出机器打印和手写文本,我只需要机器打印。

请有人指导我哪里出错了!

更新 1:

我之前使用 0.01 的学习率并将其更改为 0.0001 给了我一些损失,它似乎收敛但不是很好。 但是,那么高学习率怎么会给出 0 的损失呢?

当我在 Caffe 中使用学习率为 0.01 的相同模型时,它会产生一些损失,并且与 Tensorflow 相比收敛得很好。

【问题讨论】:

  • 您的 logits 和标签是 one-hot-encoded 吗?
  • @marcopah 是的。我想我是在问题中描述的前两行损失函数中这样做的。我的 logits 的形状为 [batch_size, num_classes],标签的形状为 [batch_size],如 tensorflow 文档中所建议的那样。
  • 我遇到了同样的问题。你的问题解决了吗?

标签: tensorflow deep-learning caffe image-segmentation


【解决方案1】:

您的损失计算看起来不错,但在您的情况下,损失为零很奇怪。你试过玩学习率吗?也许减少它。我遇到了奇怪的损失值,降低学习率对我有帮助。

【讨论】:

  • 虽然这可能是有用的反馈,但我认为作为评论而不是答案更有意义。
猜你喜欢
  • 2018-11-04
  • 2021-07-30
  • 2020-04-18
  • 2020-02-29
  • 2017-06-26
  • 2023-03-16
  • 2017-07-24
  • 2022-10-12
  • 2018-08-25
相关资源
最近更新 更多