微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用S型输出来解决Pytorch上的交叉熵损失

如何解决使用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的一些建议,但是我认为我应该在这里提出更正确的建议,因为我不擅长数学,也许我在某个地方错了,所以请问更多确定可以正确使用什么?

解决方法

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

  2. 对于二进制分类,可以使用BCEBCEWithLogitsLossBCEWithLogitsLoss结合了乙状结肠和BCE损失,因此,如果在最后一层应用了乙状结肠,则可以直接使用BCE

  3. 您所提及的GT涉及“多类”分类问题,显示的输出与multi-class的分类并不完全对应。因此,在这种情况下,您可以应用{software}和log损失相结合的CrossEntropyLoss,适用于“多类”分类问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。