pytorch 中的神经网络预测两个二进制变量

Neural network in pytorch predict two binary variables

假设我想要通用的神经网络架构:

                     ---> BinaryOutput_A
                    / 
Input --> nnLayer -
                    \
                     ---> BinaryOutput_B

输入通过神经网络层,然后预测两个二进制变量(即,A[0 or 1]B[0 or 1]

在pytorch中,你可以用以下方法建立这样的网络:

class NN(nn.Module):

    def __init__(self, inputs):        
        super(NN, self).__init__()

        # -- first layer
        self.lin = nn.Linear(inputs,10)        

        # -- firstLayer --> binaryOutputA
        self.l2a = nn.Linear(10,2)

        # -- firstLayer --> binaryOutputB
        self.l2b = nn.Linear(10,2)

    def forward(self, inputs):
        o = self.lin(inputs)
        o1 = F.log_softmax(self.l2a(o))
        o2 = F.log_softmax(self.l2b(o))        
        return o1, o2

在我的 train 函数中,我使用 loss = loss_function(output, target) 计算损失。如果是这样的话,为了使用 loss.backward() 将损失正确地反向传播到 l2al2b 层,我可以简单地 concat 带有正确标签的 target对于 l2al2b?从这个意义上讲,输出将是 [outputPredictionA, outputPredictionB],我可以将目标设为 [labelA, labelB],pytorch 会知道将损失正确分配给每一层吗?

事实证明,torch其实很聪明,你可以计算总损失为:

loss = 0
loss += loss_function(pred_A, label_A)
loss += loss_function(pred_B, label_B)

loss.backward()

并且错误将通过网络正确地反向传播。不需要 torch.cat() 或任何东西。