在 Pytorch 上使用 sigmoid 输出进行交叉熵损失

Sto*_*ase 2 python cross-entropy pytorch loss-function

I\xe2\x80\x99m 尝试修改 Yolo v1 以处理我的任务,每个对象只有 1 个类。(例如:一个对象不能同时是猫和狗)

\n

由于架构的原因(诸如本地化预测之类的其他输出必须使用回归),因此 sigmoid 被应用于模型的最后一个输出(f.sigmoid(nearly_last_output))。而对于分类,yolo 1 也使用 MSE 作为损失。但据我所知,与我想要的 one-hot 的交叉熵相比,MSE 有时表现不佳。

\n

具体来说:GT是这样的:(0 0 0 0 1假设我们总共只有5个类,每个类只有1个类,所以其中只有一个数字1,当然在这个例子中这是第5类)

\n

和分类部分的输出模型:0.1 0.1 0.9 0.2 0.1

\n

我发现一些建议使用nn.BCE/nn.BCEWithLogitsLoss但我想我应该在这里要求更正确的,因为我\xe2\x80\x99m 不擅长数学,也许我\xe2\x80\x99m 在某个地方错了,所以只是要求了解更多,并确定应该做什么我使用正确吗?

\n

Ash*_*'Sa 5

  1. MSE损失通常用于回归问题。

  2. 对于二元分类,您可以使用BCEBCEWithLogitsLossBCEWithLogitsLoss将 sigmoid 与 BCE 损失相结合,因此如果最后一层应用了 sigmoid,则可以直接使用BCE.

  3. 您的案例中提到的 GT 指的是“多类”分类问题,并且显示的输出并不真正对应于multi-class分类。因此,在这种情况下,您可以应用CrossEntropyLoss,它结合了 softmax 和对数损失,适合“多类”分类问题。