PyTorch 中的多标签软边距损失

MultiLabel Soft Margin Loss in PyTorch

我想实现一个分类器,它可以有 10 个可能 类。我正在尝试使用 MultiClass Softmax 损失函数来执行此操作。通过文档我不清楚该功能需要什么输入。

文档说需要两个[N,C]的矩阵,一个是输入,一个是目标。据我了解,输入矩阵将是我的神经网络将计算的矩阵,它具有神经网络为 10 类 中的每一个给出的概率。目标是我从我的数据集中获得的目标。

文档说 - "Target(N, C) - label targets padded by -1 ensuring same shape as the input."这是什么意思?我是否在不正确的 类 中传递了零,在正确的 类 中传递了 -1?

如果有人可以对此进行详细说明并展示一个可以作为目标矩阵传递的示例二维矩阵,那就太好了。

如果您知道对于每个示例您只有 10 个可能中的 1 个 类,您应该使用 CrossEntropyLoss,将网络预测传递给它,形状为 [batch, n_classes] , 和形状为 [batch] 的标签(标签的每个元素是 0 到 n_classes-1 之间的整数)。

您正在查看的损失是针对每个示例可以属于多个 类 的情况而设计的(比如一个人可以被归类为女性和老人)。我认为是这个 "multi" 让你感到困惑 - 它代表多个可能的分类 每个示例 ,而不仅仅是整个 "universe".[=19 中的多个潜在标签=]

在宇宙中 two/more 标签的意义上,你似乎一直在思考,CrossEntropyLoss 的对应物是 BCELoss(BCE 代表二进制交叉熵),这只是 CrossEntropyLoss 对于两个标签的情况的简化。

在pytorch 1.8.1中,我认为正确的做法是用标签填充目标的前部,并用-1填充目标的其余部分。和MultiLabelMarginLoss是一样的,我从MultiLabelMarginLoss的例子中得到的