如何在TensorFlow中实现完全卷积网络上的丢失?

时间:2017-05-02 13:40:38

标签: tensorflow image-recognition

所以我开始实施Gupta等人的论文“自然图像中文本定位的合成数据”。我遇到了一个严重的问题。

网络架构是一个完全卷积网络。最后一层基本上是NxNx7 Tensor(想象一下矩阵,其中每个单元格保存7个值)。每个单元格保持P和C值。 P是关于应该回归的边界框的6个参数,C是置信度。

现在我想在这一层上实现平方损失。由于论文指出最后一层的每个单元都是预测,如果预测器的位置确实应该包含一个边界框,则应该对该预测器(或单元)中的所有参数应用损失。如果它不应该包含一个边界框,那么只回归置信度C就足够了。

所以我应该在TensorFlow中动态定义单独的损失,我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用tf.cond,并编写类似

的内容
loss = tf.cond(is_there_sthg_label, lambda: tf.add(loss1, loss2), lambda: loss2) 

编辑

抱歉,我没有正确理解你的问题。如果存在边界框,则可以在NxN上创建大小为[i, j]且值为True(在运行时)的掩码,否则为false。然后计算每个单元格的损失,得到形状loss1的张量loss2NxN,然后

#loss1 is the loss on the confidence only, loss2 is the loss on P
loss_tensor = loss1 + tf.multiply(loss2, tf.cast(mask, loss2.dtype))
total_loss = reduce_sum(loss_tensor)

(如果你当然有批次,这仍然有效)