【问题标题】:What loss function should be used for sparse multilabel Image Classification pytorch稀疏多标签图像分类pytorch应该使用什么损失函数
【发布时间】:2021-10-04 04:18:16
【问题描述】:

我正在研究一个非常稀疏的多标签分类问题,需要对 1000 个标签进行预测,平均而言,很少有标签会处于活动状态。每张图片大约有 5 个正标签。

我尝试使用 BCEWithLogitsLoss,但无论使用不同的权重,结果都不是很好,但是即使将 pos 权重设置为 10、100、300、1000、3000,结果也很糟糕,最高 f1 分数需要高阈值,接近 0.95,但在训练 sigmoid 激活后阈值是 0.5。我能够达到的最高 f1 约为 0.3,前 5 名召回率约为 0.22。

我也尝试使用 pos_weight = (负例数)/(正例数)。

但是这些似乎都不起作用。

问题在于,当仍有改进空间时,损失会与这些参数收敛。

我想知道这种不平衡数据是否有更强大的损失函数。我也在研究 Focal Loss、NLL loss、Label Smoothing,但我不知道它们是否能很好地解决我的问题。任何帮助将不胜感激!

【问题讨论】:

    标签: python tensorflow pytorch loss-function multilabel-classification


    【解决方案1】:

    我最终通过取 pos_weight 的倒数而不是我在问题中提到的那个来解决它,如下所示:

    pos_weight = (正例数)/(负例数)。

    还使用了一个小技巧(通过将权重设置为 10000),扩大损失函数,使其不显示为 0(它有这样做的趋势)

    老实说,我不知道为什么会这样,并且可能特定于我的用例,但至少它有效。

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 2023-03-16
      • 2018-10-27
      • 1970-01-01
      • 2021-11-04
      • 2015-06-29
      • 1970-01-01
      • 2019-03-16
      • 2018-12-01
      相关资源
      最近更新 更多