BCEWithLogitsLoss:尝试将预测标签的二进制输出作为张量,与输出层混淆

BCEWithLogitsLoss: Trying to get binary output for predicted label as a tensor, confused with output layer

我的数据集中的每个元素都有一个多标签张量,例如 [1, 0, 0, 1],具有 1's0's 的不同组合。在这种情况下,因为我有 4 个张量,所以我的神经网络的输出层为 4。在使用 BCEWithLogitsLoss 时,当我调用模型(输入)时,我获得了一个像 [3, 2, 0, 0] 这样的输出张量我用输出层指定的 (0, 3) 范围有 4 个输出神经元。这与目标预期的格式不匹配,尽管当我将输出神经元的数量更改为 2 时,我得到了形状不匹配错误。需要做什么来解决这个问题?

使用 BCEWithLogitsLoss 时,您对每个输出二进制标签进行一维预测。
在您的示例中,您有 4 个二元标签要预测,因此,您的模型输出 4d 向量,每个条目代表一个二元标签的预测。

使用 BCEWithLogitsLoss 隐式地 将 Sigmoid 应用于您的输出:

This loss combines a Sigmoid layer and the BCELoss in one single class.

因此,如果你想得到模型的预测概率,你需要添加一个torch.sigmoid on top of your prediction. The sigmoid函数来转换你预测的logits 到概率。