Caffe损失层 - 向后功能

时间:2017-02-02 21:36:05

标签: deep-learning caffe loss

我对Caffe的丢失层中的后向功能有疑问。 我已经看到了欧几里德损失层的实现: https://github.com/BVLC/caffe/blob/master/examples/pycaffe/layers/pyloss.py

最后,后退功能定义如下:

def backward(self, top, propagate_down, bottom):
    for i in range(2):
        if not propagate_down[i]:
            continue
        if i == 0:
            sign = 1
        else:
            sign = -1
        bottom[i].diff[...] = sign * self.diff / bottom[i].num

我知道 bottom [0] 表示预测值, bottom [1] 表示目标值(地面实况)。
你能帮我理解为什么符号预测为+1,目标为-1? 我认为我们不需要为目标分配 bottom [1] .diff 的任何值。

如果我有多标签问题,我该如何更新代码?

1 个答案:

答案 0 :(得分:1)

bottom[1]是基本事实时,您应该propagate_down[1]False,因此没有渐变传播到标签。
但是,如果您使用此损失图层来比较两个可训练 blob,则您希望将渐变传播到bottom

这个标志只是由于这种特殊损失的衍生物,写出衍​​生物,你会看到它来自哪里。

我在这里遗失的一件事是top[0].diff。如果我理解正确,它应该保留为此图层定义的loss_weight ...