Pytorch “我的”中是否有逻辑错误;焦点损失“;功能?

Pytorch “我的”中是否有逻辑错误;焦点损失“;功能?,pytorch,loss,Pytorch,Loss,“焦距损失”就是为了解决这些困难的样本而诞生的。我用二进制交叉来包装焦距损失函数 Pytork中的熵: class FocalLoss(nn.Module): def __init__(self, gamma=2): super(FocalLoss, self).__init__() self.gamma = gamma def forward(self, pred, label): # label is not the

“焦距损失”就是为了解决这些困难的样本而诞生的。我用二进制交叉来包装焦距损失函数 Pytork中的熵:

class FocalLoss(nn.Module):

    def __init__(self, gamma=2):
        super(FocalLoss, self).__init__()
        self.gamma = gamma
    
    def forward(self, pred, label):
        # label is not the one-hot
        true = torch.zeros_like(pred, dtype=torch.float)
        for i, j in enumerate(label):
            true[i, j] = 1.0
    
        loss = nn.BCEWithLogitsLoss(pred, true)
    
        pred_prob = torch.sigmoid(pred)  # sigmoid
        p_t = true * pred_prob + (1 - true) * (1 - pred_prob)
        modulating_factor = (1.0 - p_t) ** self.gamma
        loss *= modulating_factor
    
        return loss.mean()
我在cifar10数据集中训练resnet18,以完成Classific任务,并使用它和nn.CrossEntropyLoss为 准确度的比较


但结果与我的预期相差甚远:交叉熵的准确度比我的焦距损失高出约5%!有人能在我上面的焦点丢失代码中找到逻辑错误吗