利用sigmoid输出计算Pytorch的交叉熵损失

2024-09-29 00:12:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图修改YoloV1来处理我的任务,每个对象只有一个类。(例如:obj不能同时是猫和狗)

由于架构(其他输出,如定位预测,必须使用回归),因此sigmoid应用于模型的最后一个输出(f.sigmoid(接近最后一个输出))。对于分类,yolo 1也使用MSE作为损失。但据我所知,MSE有时比不上交叉熵,对于一个我想要的热点

和specific:GT类似:0 0 0 0 1(假设我们总共只有5个类,每个类只有一个类,所以其中只有一个数字1,当然在本例中这是第5个类)

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

我发现一些关于使用nn.BCE/nn.BCEWithLogitsLoss的建议,但我认为我应该在这里要求更多的正确答案,因为我不擅长数学,也许我在某个地方错了,所以只要要求了解更多,确定我应该正确使用什么


Tags: 对象定位模型obj架构分类yolonn
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:09
  1. MSE损失通常用于回归问题

  2. 对于二进制分类,可以使用BCEBCEWithLogitsLossBCEWithLogitsLoss将sigmoid与BCE丢失结合起来,因此如果在最后一层上应用了sigmoid,则可以直接使用BCE

  3. 在您的案例中提到的GT涉及“多类”分类问题,并且显示的输出实际上并不对应于multi-class分类。因此,在这种情况下,您可以应用CrossEntropyLoss,它结合了softmax和log loss,适用于“多类”分类问题

相关问题 更多 >