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()
将损失正确地反向传播到 l2a
和 l2b
层,我可以简单地 concat
带有正确标签的 target
对于 l2a
和 l2b
?从这个意义上讲,输出将是 [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()
或任何东西。
假设我想要通用的神经网络架构:
---> 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()
将损失正确地反向传播到 l2a
和 l2b
层,我可以简单地 concat
带有正确标签的 target
对于 l2a
和 l2b
?从这个意义上讲,输出将是 [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()
或任何东西。