此问题遵循Does slice or index of chainer.Variable to get item in chainer has backward ability? 考虑一个典型的示例问题:假设我有卷积层+ FC层,我的最后一个FC层输出一个向量。
因为在某些情况下我必须切片向量来计算损失函数,例如,在多标签分类中,地面实况标签向量大多数元素为0,其中只有少数为1,在这种情况下,直接使用F. sigmoid_cross_entropy可能会导致标签不平衡问题,所以我决定使用[0,1](a是chainer。最后FC层的可变输出)来切片特定元素来计算损失函数。
在这种情况下,最后一个FC层如何进行梯度流(BP),如何更新其权重矩阵?
答案 0 :(得分:0)
当您为变量b = a[index]
和切片a
编写index
时(可能是花式索引),通过此操作反向传播会将b.grad
的值设置为a.grad[index]
,将a.grad
的其他元素保留为零(因为a
的相应元素不会影响损失值)。然后,最后一个FC层的反向支撑计算梯度w.r.t.与a.grad
一样的权重矩阵和偏差向量。