【问题标题】:Using sigmoid output for cross entropy loss on Pytorch在 Pytorch 上使用 sigmoid 输出进行交叉熵损失
【发布时间】:2021-01-02 23:28:58
【问题描述】:

我正在尝试修改 Yolo v1 以处理每个对象只有 1 个类的任务。 (例如:一个 obj 不能既是猫又是狗)

由于架构(必须使用回归等其他输出,如定位预测),因此将 sigmoid 应用于模型的最后一个输出(f.sigmoid(nearly_last_output))。而对于分类,yolo 1 也使用 MSE 作为损失。但据我所知,与我想要的 one-hot 的交叉熵相比,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 但我认为我应该在这里要求更正确,因为我不擅长数学,也许我在某个地方错了,所以只是要求了解更多并确定什么我应该正确使用吗?

【问题讨论】:

    标签: python pytorch loss-function cross-entropy


    【解决方案1】:
    1. MSE loss 通常用于回归问题。

    2. 对于二元分类,您可以使用BCEBCEWithLogitsLossBCEWithLogitsLoss结合了sigmoid和BCE loss,所以如果最后一层应用了sigmoid,可以直接使用BCE

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

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 2021-08-25
      • 2021-11-25
      • 2018-01-31
      • 2017-03-14
      • 2018-05-31
      • 2018-04-14
      • 2020-08-13
      • 2020-12-18
      相关资源
      最近更新 更多