我对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 的任何值。
如果我有多标签问题,我该如何更新代码?
答案 0 :(得分:1)
当bottom[1]
是基本事实时,您应该propagate_down[1]
为False
,因此没有渐变传播到标签。
但是,如果您使用此损失图层来比较两个可训练 blob,则您希望将渐变传播到bottom
。
这个标志只是由于这种特殊损失的衍生物,写出衍生物,你会看到它来自哪里。
我在这里遗失的一件事是top[0].diff
。如果我理解正确,它应该保留为此图层定义的loss_weight
...