2017-05-02 50 views
0

所以我开始实施Gupta等人的论文“自然图像中的文本本地化的合成数据”。我遇到了一个严重的问题。如何在TensorFlow的完全卷积网络上实现损失?

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

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

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

回答

0

您可以使用tf.cond,并喜欢写东西

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

编辑

对不起,我没有正确地理解你的问题。如果存在边界框,则可以在[i, j]上创建一个大小为NxN的掩码,其值为True(在运行时),否则为false。然后你计算你都针对每个小区的损失,你得到张量loss1和形状NxNloss2,然后

#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) 

+0

我能做到这一点迭代(当然如果你的批次仍然工作)?就像取出输出层的每个单元并决定该单元的损失一样。 – alexovits

+0

@alexovits我编辑了我的帖子 – gdelab

+1

我会尽快尝试。感谢这看起来很有希望。这只是疯狂的,TF有时可能无证。 – alexovits

相关问题