chainer.functions.get_item如何完全反向传播?

时间:2017-09-06 10:39:21

标签: chainer

此问题遵循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),如何更新其权重矩阵?

1 个答案:

答案 0 :(得分:0)

当您为变量b = a[index]和切片a编写index时(可能是花式索引),通过此操作反向传播会将b.grad的值设置为a.grad[index] ,将a.grad的其他元素保留为零(因为a的相应元素不会影响损失值)。然后,最后一个FC层的反向支撑计算梯度w.r.t.与a.grad一样的权重矩阵和偏差向量。