FocalLoss原理通俗解释及其二分类和多分类场景下的原理与实现


免费链接: Blogger(需翻Q)


1. FocalLoss的应用场景

学一个东西,首先要知道这个东西是干嘛用的。

FocalLoss主要有两个作用,这也决定了它的应用场景:

  1. FocalLoss可以调节正负样本的loss权重。这意味着,当正负样本数量及其不平衡时,可以考虑使用FocalLoss。
  2. FocalLoss可以调节难易样本的loss权重。这意味着,当训练样本的难易程度不平衡时,可以考虑使用FocalLoss

这也是“Focal Loss”的名字的含义,把目光聚焦(Focal)在那些“少的,难的”样本上。

虽然大部分博客讨论FocalLoss都是在目标检测场景下,但其实FocalLoss其他场景下都可以用。

举个NLP的应用场景:

  1. 当我们
下面是 circle loss focal loss 的简单实现(包括二分类多分类): Circle Loss: ```python import torch import torch.nn as nn import torch.nn.functional as F class CircleLoss(nn.Module): def __init__(self, m=0.25, s=30): super(CircleLoss, self).__init__() self.m = m self.s = s def forward(self, feats, labels): sim_mat = torch.matmul(feats, feats.t()) mask = labels.expand(labels.size(0), labels.size(0)).t().eq(labels.expand(labels.size(0), labels.size(0))) pos_mask = mask.triu(diagonal=1) neg_mask = mask.logical_not().triu(diagonal=1) pos_sim = sim_mat[pos_mask] neg_sim = sim_mat[neg_mask] alpha_p = F.relu(-pos_sim.detach() + 1 + self.m) alpha_n = F.relu(neg_sim.detach() + self.m) delta_p = 1 - self.m delta_n = self.m logit_p = -self.s * alpha_p * (pos_sim - delta_p) logit_n = self.s * alpha_n * (neg_sim - delta_n) logit = torch.cat([logit_p, logit_n], dim=0) loss = F.softplus(torch.logsumexp(logit, dim=0)) return loss ``` Focal Loss: ```python import torch import torch.nn as nn import torch.nn.functional as F class FocalLoss(nn.Module): def __init__(self, alpha=0.25, gamma=2, reduction='mean'): super(FocalLoss, self).__init__() self.alpha = alpha self.gamma = gamma self.reduction = reduction def forward(self, inputs, targets): BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction='none') pt = torch.exp(-BCE_loss) F_loss = self.alpha * (1-pt)**self.gamma * BCE_loss if self.reduction == 'mean': return torch.mean(F_loss) elif self.reduction == 'sum': return torch.sum(F_loss) else: return F_loss ``` 以上代码适用于 PyTorch 深度学习框架。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iioSnail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值