当我使用相同的损失训练它们时,我在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增加时,我该如何解决此问题。 可以使用除“ +”以外的其他任何运算符来组合损失吗?还是应该对其他损失进行加权?
答案 0 :(得分:-1)
如果您有两种不同的损失函数,并且分别为它们完成了forwards
,那么这样做很聪明
(loss1 + loss2).backward()
这在计算方面很有效。
您应该实现的是使模型学习,如何最大程度地减少损失。
您的示例中缺少一些代码,但是您应该拥有nn.Module
,这可能是您的自定义模块中的参数应该学会降低损失的原因。
我喜欢您总结loss = loss1 + loss2
的方法。