郭震 AI公众号:郭震AI

16 PyTorch小白从零学教程系列:模型评估与调优之评估模型性能

发布日期:

最近更新:

分类: Pytorch小白

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点4 个
图文要点6 张
正文规模1.6k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 4 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

评估模型性能流程图查看大图
评估模型性能流程图

评估阶段要关闭训练行为和梯度计算。model.eval()torch.no_grad() 能减少不必要计算,也避免 BatchNorm、Dropout 等行为混乱。

评估模型性能核对图查看大图
评估模型性能核对图

评估时我会保存错例,而不只保存平均分。错例能告诉你模型真正薄弱的地方。

在上一篇文章中,我们深入探讨了模型训练的实现和训练循环的细节。我们通过定义损失函数、优化器以及训练循环来训练我们的模型。现在,我们进入模型评估与调优的过程,重点放在如何评估模型性能。

评估模型性能的重要性

模型训练不仅仅是提高损失函数的表现,更重要的是评估模型对未见样本的泛化能力。有效的评估策略可以帮助我们了解模型的强项与弱点,以及它在真实世界应用中的可靠性。因此,评估模型性能是深度学习开发过程中不可或缺的一步。

PyTorch模型性能评估判断卡查看大图
PyTorch模型性能评估判断卡

评估 PyTorch 模型性能时,先看 eval 模式、no_grad、测试集加载、指标累计、混淆矩阵和错误样例。

常用的评估指标

在评估分类模型时,我们通常使用以下指标:

  1. 准确率(Accuracy): 它是正确分类的样本占总样本数的比例。

    Accuracy=TP+TNTP+TN+FP+FN\text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}}

    其中,TP是真正例,TN是真负例,FP是假正例,FN是假负例。

  • 精确率(Precision): 它度量的是被分类为正类的样本中真正为正类的比例。

    Precision=TPTP+FP\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}}
  • 召回率(Recall): 又称为灵敏度,它度量的是所有真正的正类样本中被正确分类为正类的比例。

    Recall=TPTP+FN\text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}}
  • F1分数: 它是精确率和召回率的调和平均,常用于不均衡数据的评估。

    F1=2PrecisionRecallPrecision+RecallF1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}
  • 使用PyTorch进行模型性能评估

    接下来,让我们通过代码演示如何在PyTorch中评估模型性能。我们将构建一个简单的分类模型,并计算其准确率、精确率、召回率和F1分数。

    代码实例

    假设我们已经完成了模型的训练,现在我们使用测试集来评估这个模型:

    import torch
    import torch.nn.functional as F
    from sklearn.metrics import precision_score, recall_score, f1_score
    
    # 假设我们有一个训练好的模型和测试数据集
    model.eval()  # 设置模型为评估模式
    
    # 假设 test_loader 是我们的测试数据集的 DataLoader
    all_preds = []
    all_labels = []
    
    with torch.no_grad():  # 禁用梯度计算
        for data, labels in test_loader:
            outputs = model(data)  # 前向传播得到输出
            _, preds = torch.max(outputs, 1)  # 获取预测值
            all_preds.extend(preds.numpy())  # 将预测值添加到列表
            all_labels.extend(labels.numpy())  # 将真实标签添加到列表
    
    # 计算评估指标
    accuracy = (np.array(all_preds) == np.array(all_labels)).mean()
    precision = precision_score(all_labels, all_preds, average='weighted')
    recall = recall_score(all_labels, all_preds, average='weighted')
    f1 = f1_score(all_labels, all_preds, average='weighted')
    
    print(f'准确率: {accuracy:.2f}')
    print(f'精确率: {precision:.2f}')
    print(f'召回率: {recall:.2f}')
    print(f'F1分数: {f1:.2f}')
    

    在上述代码中,我们使用model.eval()将模型设置为评估模式,避免了在评估时影响模型的某些层(例如 Dropout 和 BatchNorm)。然后,我们禁用梯度计算以提高性能,并通过循环遍历test_loader中的测试数据,计算模型的预测结果。

    PyTorch小白从零学教程系列:模型评估与调优之评估模型性能应用复盘卡查看大图
    PyTorch小白从零学教程系列:模型评估与调优之评估模型性能应用复盘卡

    读到这里,可以把《PyTorch小白从零学教程系列:模型评估与调优之评估模型性能》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。

    PyTorch小白从零学教程系列:模型评估与调优之评估模型性能应用检查卡查看大图
    PyTorch小白从零学教程系列:模型评估与调优之评估模型性能应用检查卡

    读完《PyTorch小白从零学教程系列:模型评估与调优之评估模型性能》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。

    总结

    通过本节的学习,我们不仅了解了评估模型性能的重要性,还学习了几种常用的评估指标及其计算方法。在 PyTorch 中实现这些指标的计算也相对简单。接下来的文章中,我们将继续探讨“过拟合与正则化”的主题,这是模型评估与调优中的一个重要方面,帮助我们构建更加鲁棒的模型。所以,让我们期待下一篇内容的展开。

    PyTorch阅读地图卡查看大图
    PyTorch阅读地图卡

    读完《PyTorch小白从零学教程系列:模型评估与调优之评估模型性能》后,可以回头问三件事:它解决什么问题,哪一步最容易出错,自己能否拿一个小例子跑通。

    希望这篇文章对你学习 PyTorch 和模型评估有所帮助,欢迎继续关注我们的教程系列!

    继续阅读

    从这篇继续找到相关教程

    AI 教程总索引

    常见问题

    读前先确认这三点

    PyTorch小白从零学教程系列:模型评估与调优之评估模型性能适合谁读?

    这是 PyTorch 入门 系列第 16 / 20 篇,适合正在学习PyTorch 入门,并且需要把概念落到操作步骤或判断标准里的读者。

    读这篇PyTorch 入门教程要多久?

    按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

    这篇文章里的图文节点怎么用?

    正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关教程

    AI 教程总索引

    继续阅读

    继续找到相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...