Machine learning Pytorch中多输出模型的损耗

Machine learning Pytorch中多输出模型的损耗,machine-learning,deep-learning,pytorch,Machine Learning,Deep Learning,Pytorch,在Pytork中,我有一个多输出模型,当我使用相同的损耗训练它们,然后反向传播时,我将两个输出的损耗合并,但当一个输出损耗减少时,其他输出损耗增加,依此类推。我怎样才能解决这个问题 def转发(自身,x): #神经网络拱。前传 x=密度1(x) x1=密度2(x) x2=密度2(x) x1=F.log_softmax(x1) x2=F.log\u softmax(x2) 返回x1,x2 out1,out2=模型(数据) loss1=NLLL(out1,target1) loss2=NLLL(ou

在Pytork中,我有一个多输出模型,当我使用相同的损耗训练它们,然后反向传播时,我将两个输出的损耗合并,但当一个输出损耗减少时,其他输出损耗增加,依此类推。我怎样才能解决这个问题

def转发(自身,x):
#神经网络拱。前传
x=密度1(x)
x1=密度2(x)
x2=密度2(x)
x1=F.log_softmax(x1)
x2=F.log\u softmax(x2)
返回x1,x2
out1,out2=模型(数据)
loss1=NLLL(out1,target1)
loss2=NLLL(out2,target2)
损耗=损耗1+损耗2
loss.backward()
当损失1减少损失2增加和当损失2减少损失1增加时,我如何解决问题。
除了“+”之外,是否可以使用任何其他运算符来组合损失,或者我是否应该为不同的损失设置权重?

如果您有两个不同的损失函数,并且您分别完成了这两个函数的
转发
,这样做是明智的

(loss1 + loss2).backward() 
这在计算上是有效的

你应该做到的是让你的模型学会如何最大限度地减少损失。 您的示例中缺少一些代码,但您应该拥有
nn.Module
,这可能是您的自定义模块,其中包含的参数应该可以学习如何降低损失


我喜欢你的方法,把损失加起来,为什么你认为这是不合理的行为?试着减小步长。我也试过了,但没用。我在keras做了同样的模型,两个损失同时减少。你能解释一下这里发生了什么吗?为什么你要两次计算相同的产出,并将其与不同的目标进行比较?我试图用相同的神经网络预测价格和数量。这就是为什么我使用来自前几层的x,然后它传递到log_softmax函数。你确定你做的一切都正确吗?您还需要使用
optimizer.zero_grad()
然后使用
optimizer.step()
将梯度归零,但此处不显示完整的代码。所以一定要检查。how is(loss1+loss2)。backward()与loss.backward()不同