Caffe:后面的函数应该计算什么?

时间:2017-06-01 22:14:01

标签: machine-learning computer-vision caffe

我正在尝试使用Python层为Caffe定义自定义丢失函数,但我无法澄清什么是必需的输出。 让图层的函数定义为L = sum(F(xi,yi))/ batch_size,其中L是最小化的损失函数(即top [0]),x是网络输出(bottom [0]) ,y是基础真值标签(即底部[1]),xi,yi是批次中的第i个样本。

EuclideanLossLayer(https://github.com/BVLC/caffe/blob/master/examples/pycaffe/layers/pyloss.py)的广为人知的例子表明,在这种情况下,后向级别必须返回bottom[0].diff[i] = dL(x,y)/dxi。我发现的另一个参考文献显示了相同的内容:Implement Bhattacharyya loss function using python layer Caffe

但在其他例子中我看到它应该乘以top [0] .diff。 1.什么是正确的? bottom [0] [i] = dL / dx或bottom [0] .diff [i] = dL / dxi * top [0] .diff [i]

2 个答案:

答案 0 :(得分:1)

每个损失层可能有loss_weight:表示此特定损失的“重要性”(如果网络有多个损失层)。 Caffe将此权重实现为top[0].diff,以乘以渐变。

答案 1 :(得分:0)

让我们回到基本原则:反向传播的目的是根据地面实况反馈调整层权重。其中最基本的部分包括“我目前的猜测有多远”和“我应该如何努力改变杠杆?”这些分别形式化为top.difflearning_rate

在微观层面上,每一层的基本事实是top反馈,因此top.diff是“距离多远......”的本地化身。因此,在某些点,您需要在调整计算中包含top[0].diff作为主要因素。

我知道这不是一个完整,直接的答案 - 但我希望它在你解决眼前的问题后继续提供帮助。