如何解决使用S型输出来解决Pytorch上的交叉熵损失
我正在尝试修改Yolo v1以处理我的任务,每个对象只有一个类。 (例如:obj不能同时是猫和狗)
由于架构的原因(其他输出(如定位预测必须使用回归),因此将sigmoid应用于模型的最后一个输出(f.sigmoid(nearly_last_output))。对于分类,yolo 1还使用MSE作为损失。但是据我所知,MSE有时与像我想要的那样一站式交叉熵相比效果不佳。
具体来说:GT像这样:0 0 0 0 1
(假设我们总共只有5个类,每个类只有1个类,所以其中只有一个数字1,当然在这个示例中是第5个类)
以及分类部分的输出模型:0.1 0.1 0.9 0.2 0.1
我发现使用nn.BCE
/ nn.BCEWithLogitsLoss
的一些建议,但是我认为我应该在这里提出更正确的建议,因为我不擅长数学,也许我在某个地方错了,所以请问更多确定可以正确使用什么?
解决方法
-
MSE
损失通常用于回归问题。 -
对于二进制分类,可以使用
BCE
或BCEWithLogitsLoss
。BCEWithLogitsLoss
结合了乙状结肠和BCE损失,因此,如果在最后一层应用了乙状结肠,则可以直接使用BCE
。 -
您所提及的GT涉及“多类”分类问题,显示的输出与
multi-class
的分类并不完全对应。因此,在这种情况下,您可以应用{software}和log损失相结合的CrossEntropyLoss
,适用于“多类”分类问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。