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

时间:2017-10-30 13:20:30

标签: backpropagation pytorch

假设我想拥有通用神经网络架构:

                     ---> 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)计算损失。如果是这种情况,要使用l2a正确地将损失反向传播到l2bloss.backward()图层,我是否可以concat使用正确的标签target对于l2al2b?从这个意义上说,输出将是[outputPredictionA, outputPredictionB],我可以使目标为[labelA, labelB],是否知道如何正确地将损失分配给每一层?

1 个答案:

答案 0 :(得分:1)

事实证明,火炬实际上非常聪明,你可以将总损失计算为:

torch.cat()

并且错误将通过网络正确反向传播。不需要{{1}}或其他任何内容。