【问题标题】:Backpropagating multiple losses in Pytorch在 Pytorch 中反向传播多重损失
【发布时间】:2022-01-18 21:19:09
【问题描述】:

我正在构建一个级联的神经网络,我想将主要损失反向传播回 DNN,并计算一个辅助损失回传给每个 DNN。

我试图弄清楚在构建此类模型时最佳做法是什么,以及如何确保正确计算我的损失。我是构建一个 torch.nn.Module 和一个优化器,还是必须为每个网络创建单独的模块和优化器?此外,我可能拥有三个以上的级联 DNN。

方法a)

import torch
from torch import nn, optim

class MasterNetwork(nn.Module):
    def init(self):
          super(MasterNetwork, self).__init__()
          dnn1 = nn.ModuleList()
          dnn2 = nn.ModuleList()
          dnn3 = nn.ModuleList()

    def forward(self, x, z1, z2):
          out1 = dnn1(x)
          out2 = dnn2(out1 + z1)
          out3 = dnn3(out2 + z2)

          return [out1, out2, out3]

def LossFunction(in):
       # do stuff
       return loss # loss is a scalar value
def ac_loss_1_fn(in):
       # do stuff
       return loss # loss is a scalar value
def ac_loss_2_fn(in):
       # do stuff
       return loss # loss is a scalar value
def ac_loss_3_fn(in):
       # do stuff
       return loss # loss is a scalar value

model = MasterNetwork()
optimizer = optim.Adam(model.parameters())

input = torch.tensor()
z1 = torch.tensor()
z2 = torch.tensor()

outputs = model(input, z1, z2)

main_loss = LossFunction(outputs[2])
ac1_loss = ac_loss_1_fn(outputs[0])
ac2_loss = ac_loss_2_fn(outputs[1])
ac3_loss = ac_loss_3_fn(outputs[2])

optimizer.zero_grad()

'''
This is where I am uncertain about how to backpropagate the AC losses for each DNN
in addition to the main loss.
'''

optimizer.step()

方法 b) 这将为每个 DNN 创建一个 nn.Module 类和优化器,然后将损失转发到下一个 DNN。

我希望为方法 a) 提供一个解决方案,因为它不那么乏味,而且我不必处理调整多个优化器的问题。但是,我不确定这是否可能。有一个类似的 question 关于反向传播多个损失,但是,我无法理解组合损失如何对不同的组件起作用。

【问题讨论】:

    标签: python neural-network pytorch


    【解决方案1】:

    您正在寻找的解决方案可能会使用以下某种形式:

    y = torch.tensor([main_loss, ac1_loss, ac2_loss, ac3_loss])
    y.backward(gradient=torch.tensor([1.0,1.0,1.0,1.0]))
    

    请参阅https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#gradients 进行确认。

    存在类似的问题,但这个问题使用了不同的措辞,是我在遇到问题时首先发现的问题。类似的问题可以在Pytorch. Can autograd be used when the final tensor has more than a single value in it?

    找到

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2016-01-24
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多