我正在尝试在 PyTorch 中编写一个用于二进制分类的神经网络,但我对损失函数感到困惑。
我看到 BCELoss 是一个专门针对二进制分类的常用函数。我还看到 N 个可能类别的 N 个输出的输出层是一般分类的标准。但是,对于二元分类,它似乎可以是 1 个或 2 个输出。
那么,我应该有 2 个输出(每个标签 1 个),然后将我的 0/1 训练标签转换为 [1,0] 和 [0,1] 数组,还是使用类似 sigmoid 的东西作为单变量输出?
以下是相关的代码片段,您可以看到:
self.outputs = nn.Linear(NETWORK_WIDTH, 2) # 1 or 2 dimensions?
def forward(self, x):
# other layers omitted
x = self.outputs(x)
return F.log_softmax(x) # <<< softmax over multiple vars, sigmoid over one, or other?
criterion = nn.BCELoss() # <<< Is this the right function?
net_out = net(data)
loss = criterion(net_out, target) # <<< Should target be an integer label or 1-hot vector?
提前致谢。