【问题标题】:Caffe loss layer - backward functionCaffe 损失层 - 后向函数
【发布时间】:2017-06-20 03:27:34
【问题描述】:

我有一个关于 Caffe 损失层中的后向函数的问题。 我在以下位置看到了欧几里德损失层的实现: https://github.com/BVLC/caffe/blob/master/examples/pycaffe/layers/pyloss.py

最后,backward函数定义如下:

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] 是目标值(ground truth)。
你能帮我理解为什么 sign 是 +1 的预测和 -1 的目标? 我认为我们不需要为目标分配任何值给 bottom[1].diff

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

【问题讨论】:

    标签: deep-learning caffe loss


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多