2

我对 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

我知道底部 [0]表示预测值,底部 [1]是目标值(基本事实)。
你能帮我理解为什么符号是 +1 表示预测而 -1 表示目标吗?我认为我们不需要为目标分配任何值到bottom[1].diff

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

4

1 回答 1

1

bottom[1]你应该期望什么时候是基本事实propagate_down[1]False因此没有梯度传播到标签。
但是,如果您使用此损失层来比较两个可训练的blob,您希望将梯度传播到两个bottoms。

这个符号只是由于这个特殊损失的导数,写下导数,你会看到它来自哪里。

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

于 2017-02-02T22:15:59.843 回答