Pytorch中多输出模型的损失

时间:2019-07-02 07:55:10

标签: machine-learning deep-learning pytorch

当我使用相同的损失训练它们时,我在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增加时,我该如何解决此问题。 可以使用除“ +”以外的其他任何运算符来组合损失吗?还是应该对其他损失进行加权?

1 个答案:

答案 0 :(得分:-1)

如果您有两种不同的损失函数,并且分别为它们完成了forwards,那么这样做很聪明

(loss1 + loss2).backward() 

这在计算方面很有效。

您应该实现的是使模型学习,如何最大程度地减少损失。 您的示例中缺少一些代码,但是您应该拥有nn.Module,这可能是您的自定义模块中的参数应该学会降低损失的原因。

我喜欢您总结loss = loss1 + loss2的方法。