FocalLoss

class FocalLoss(*, gamma: float = 2.0, alpha: float | None = None, **kwargs)[source]

基础类:PointwiseLoss

[lin2018]提出的焦点损失。

这是对(二元)交叉熵损失的一种改进,能更好地处理不平衡数据。 该实现深受torchvision.ops.sigmoid_focal_loss()中实现的启发,不同之处在于它使用的是模块形式而非函数形式。

损失给出为

\[FL(p_t) = -(1 - p_t)^\gamma \log (p_t)\]

使用 \(p_t = y \cdot p + (1 - y) \cdot (1 - p)\),其中 \(p\) 指的是预测概率,而 y 指的是在 \({0, 1}\) 中的真实标签。

Focal loss 还有一些其他不错的特性,例如,更好的校准预测概率。参见 [mukhoti2020]

初始化损失模块。

Parameters:
  • gamma (float) – >= 0 调制因子 (1 - p_t) 的指数,用于平衡简单和困难样本。设置 gamma > 0 会减少对分类良好的样本的相对损失。 默认值 2 取自 [lin2018],该文献报告此设置在其实验中效果最佳。然而,这些实验是在图像中的对象分类任务上进行的,因此需要谨慎对待。

  • alpha (float | None) – 范围在 (0, 1) 内的加权因子,用于平衡正例和负例。alpha 是正类的权重,即增加它会使损失更关注这个类。负类的权重为 1 - alpha。 [lin2018] 建议将其设置为类频率的倒数,或将其视为超参数。

  • kwargs – 传递给pykeen.losses.PointwiseLoss的额外基于关键字的参数。

Raises:

ValueError – 如果alpha在错误的范围内

方法总结

forward(prediction, labels)

定义每次调用时执行的计算。

方法文档

forward(prediction: Tensor, labels: Tensor) Tensor[源代码]

定义每次调用时执行的计算。

应该由所有子类覆盖。

注意

尽管前向传递的配方需要在此函数内定义,但之后应该调用Module实例而不是这个,因为前者负责运行已注册的钩子,而后者则默默地忽略它们。

Parameters:
Return type:

Tensor