机器学习中,评价指标Top

这篇博客介绍了如何计算深度学习模型的Top-1和Top-5错误率,这两个指标用于衡量模型预测的准确性。通过给出的Python代码示例,展示了如何利用torch库在验证集上进行评估,包括模型预测的最大概率值及其对应索引的获取,以及最终准确率的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Top-1 错误率 = 1.0 - Top-1正确率

Top-5 错误率 = 1.0 - Top-5正确率 【Top-1,Top-5中的Top指的是一个图片中的概率前1和前5,不是所有图片中预测最好的1个或5个图片】

实现代码:

def accuracy(output, target, topk=(1,)):
    maxk = max(topk)
    batch_size = target.size(0)
    # torch.topk(input, k, dim=None, largest=True, sorted=True, *, out=None) -> (Tensor, LongTensor)
    _, pred = output.topk(maxk, 1, True, True)  # Returns the k largest elements of the given input tensor along a given dimension.
    # _ 是dim=1维度下的max k个values;pred是dim=1维度下values的下标。参见:https://blog.youkuaiyun.com/u014264373/article/details/86525621
    pred = pred.t()
    # >> > b = torch.tensor([[2, 2], [3, 3], [5, 5]])
    # >> > print(b.size())
    # torch.Size([3, 2])
    # >> > a.expand_as(b)
    # tensor([[2, 2],
    #         [3, 3],
    #         [4, 4]])
    # >> > a
    # tensor([[2],
    #         [3],
    #         [4]])
    correct = pred.eq(target.view(1, -1).expand_as(pred))  # expand_as 把一个tensor变成和函数括号内一样形状的tensor,用法与expand()类似
    # outputs = torch.FloatTensor([[1], [2], [3]])
    # targets = torch.FloatTensor([[0], [2], [3]])
    # print(targets.eq(outputs.data)) = [0,1,1]

    res = []
    for k in topk:
        correct_k = correct[:k].view(-1).float().sum(0)
        res.append(correct_k.mul_(100.0/batch_size))   # 如果batch_size = 10,表示10张图片一起技计算。那么correct_k是10张的正确度相加。
    return res
def evaluteTop1(model, loader):
    model.eval()
    
    correct = 0
    total = len(loader.dataset)

    for x,y in loader:
        x,y = x.to(device), y.to(device)
        with torch.no_grad():
            logits = model(x)
            pred = logits.argmax(dim=1)
            correct += torch.eq(pred, y).sum().float().item()
        #correct += torch.eq(pred, y).sum().item()
    return correct / total

def evaluteTop5(model, loader):
    model.eval()
    correct = 0
    total = len(loader.dataset)
    for x, y in loader:
        x,y = x.to(device),y.to(device)
        with torch.no_grad():
            logits = model(x)
            maxk = max((1,5))        
            y_resize = y.view(-1,1)
            _, pred = logits.topk(maxk, 1, True, True)
            correct += torch.eq(pred, y_resize).sum().float().item()
    return correct / total

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值