PyTorch 中的多标签软边距损失

Viv*_*vek 1 python softmax pytorch loss-function

我想实现一个分类器,它可以有 10 个可能的类中的 1 个。我正在尝试使用 MultiClass Softmax 损失函数来做到这一点。通过文档,我不清楚该功能需要什么输入。

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

文档说 - “目标(N,C) - 用 -1 填充的标签目标确保与输入相同的形状。” 这是什么意思?我是否在不正确的类中传递零并为正确的类传递 -1?

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

Jat*_*aki 7

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

您正在查看的损失是为每个示例可以属于多个类别的情况而设计的(比如一个人可以分为女性和老年人)。我认为正是这种“多重”让您感到困惑——它代表每个示例的多种可能分类,而不仅仅是整个“宇宙”中的多个潜在标签。

在宇宙中有两个/更多标签的意义上,你似乎一直在思考,对应的CrossEntropyLoss将是BCELoss(BCE 代表二元交叉熵),这只是CrossEntropyLoss两个标签情况的简化。