【发布时间】: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