【发布时间】:2018-11-08 01:25:19
【问题描述】:
假设我有以下前向传递,导致两个单独的损失:
forward(self, input)
x = self.layer1(input)
y = self.layer2(x)
z = self.layer3(y)
return y, z
然后我们计算 loss1(y) 和 loss2(z)。然后我们可以用一个优化器优化loss = loss1 + loss2。
但我有两个注意事项:(1) 我希望仅针对 layer2 计算 d_loss1(没有 layer1),以及 (2) 我希望针对 layer3 和 layer1 计算 d_loss2 - 没有 layer2。 本质上,我想用单独的损失分别训练网络的非连续部分。
我相信我可以通过在 layer2 的输入中引入停止梯度来解决 (1),如下所示:
forward(self, input)
x = self.layer1(input)
y = self.layer2(x)
y_stop_gradient = self.layer2(Variable(x.data))
z = self.layer3(y)
return y_stop_gradient, z
但是我该如何解决(2)? 换句话说,我希望 loss2 的梯度能够“跳过” layer2 同时保持 layer2 可针对 loss1 进行训练。
【问题讨论】:
标签: deep-learning pytorch gradient-descent