【发布时间】:2019-11-12 19:50:24
【问题描述】:
当我使用相同的损失训练它们然后反向传播时,我在 PyTorch 中有一个多输出模型,我将两个输出的损失结合起来,但是当一个输出损失减少时,其他损失增加等等。我该如何解决这个问题?
def forward(self, x):
#neural network arch. forward pass
x = dense1(x)
x1 = dense2(x)
x2 = dense2(x)
x1 = F.log_softmax(x1)
x2 = F.log_softmax(x2)
return x1, x2
out1, out2 = model(data)
loss1 = NLLL(out1, target1)
loss2 = NLLL(out2, target2)
loss = loss1 + loss2
loss.backward()
当 loss1 减少 loss2 增加并且当 loss2 减少 loss1 增加时,我该如何解决这个问题。 是否可以使用除“+”之外的任何其他运算符来组合损失,或者我应该对不同的损失加权吗?
【问题讨论】:
-
您为什么认为这不是合理的行为?尝试减小步长。
-
我也试过了,但没有帮助。我在 keras 中制作了相同的模型,并且两者的损失同时减少。
-
你能解释一下这里发生了什么吗?为什么要计算两次相同的输出并将其与不同的目标进行比较?
-
我试图通过同一个神经网络预测价格和数量。这就是我使用来自先前层的 x 的原因,然后它传递给 log_softmax 函数。
-
你确定你做的一切正确吗?您还需要使用
optimizer.zero_grad()和optimizer.step()将梯度归零,但这里没有显示完整代码。所以请检查一下。
标签: machine-learning deep-learning pytorch