我正在训练一个模型,用于从图像中分割机器打印的文本。图像可能还包含条形码和手写文本。处理地面实况图像,使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相比收敛良好。
答案 0 :(得分:1)
您的损失计算看起来很好,但在您的情况下,零损失是很奇怪的。你尝试过学习率吗?也许减少它。我遇到了奇怪的损失值,降低了学习率对我有帮助。