0

这个问题遵循chainer的切片或索引。在chainer中获取项目的变量是否具有向后能力? 考虑一个典型的示例问题:假设我有卷积层 + FC 层,我的最后一个 FC 层输出一个向量。

因为在某些情况下我必须对向量进行切片来计算损失函数,例如,在多标签分类中,ground truth 标签向量大部分元素为 0,只有少数为 1,这种情况下,直接使用 F.sigmoid_cross_entropy 可能会导致标签不平衡问题,所以我决定使用 a[0, 1]( a is chainer.Variable output by last FC layer) 对特定元素进行切片来计算损失函数。

在这种情况下,最后一个FC层是如何进行梯度流(BP)的,它是如何更新其权重矩阵的?

4

1 回答 1

0

当您b = a[index]为变量a和切片index(可能是花哨的索引)编写时,通过此操作进行反向传播会将值设置b.grada.grad[index],而将其他元素设为a.grad零(因为 的对应元素a不会影响损失值)。最后一个 FC 层的反向传播然后像往常一样使用 this 计算权重矩阵和偏置向量的梯度a.grad

于 2017-09-07T01:49:57.417 回答