pytorch evaluate model(torch.no_grad() and model.eval())

  • 使用 torch.no_grad():这是一个上下文管理器(context manager),用于暂时禁用在其作用域内的所有计算的梯度计算。这在模型评估阶段非常有用,因为它可以减少内存消耗并提高计算效率,因为验证过程中不需要计算梯度信息。

  • 调用 model.eval():这将模型设置为评估模式。在这种模式下,模型中的某些层(如批量归一化层 BatchNorm 和 dropout 层)会改变其行为,以适应评估(例如,BatchNorm 层会使用在训练时收集的运行时统计数据,而 dropout 层会关闭)。

py 复制代码
import torch
from torch.utils.data import DataLoader
from sklearn.metrics import accuracy_score

def evaluate_model(model, data_loader, device):
    """
    对给定的模型和数据加载器进行验证。
    
    参数:
    - model: 要验证的PyTorch模型。
    - data_loader: 数据的PyTorch DataLoader。
    - device: 用于模型和数据的设备('cuda' 或 'cpu')。
    """
    # 将模型设置为评估模式,这会关闭dropout和batch normalization层的训练行为
    model.eval()
    
    # 初始化度量指标
    total_correct = 0
    total_samples = 0
    
    # 使用torch.no_grad()上下文管理器来禁用梯度计算
    with torch.no_grad():
       # 遍历数据加载器中的所有批次
        for inputs, targets in data_loader:
            # 将数据移动到指定的设备
            inputs, targets = inputs.to(device), targets.to(device)
            
            # 前向传播,获取模型输出
            outputs = model(inputs)
            
            # 计算预测结果
            _, predicted = torch.max(outputs, 1)
            
            # 计算准确度
            correct = (predicted == targets).sum().item()
            
            total_correct += correct
            total_samples += targets.size(0)
    
    # 计算总体准确度
    accuracy = total_correct / total_samples
    
    return accuracy
相关推荐
poiu12346572 分钟前
使用AI辅助学习与资料整理的个人体会
人工智能·学习
清华kenny4 分钟前
美业经营者如何筛选中医健康系统?避坑与推荐
大数据·人工智能·安徽晓得养
4SAPI10 分钟前
电商全链路内容自动化生成大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
运维·人工智能·架构·自动化·1024程序员节
2601_9654490811 分钟前
AI视频制作:做文物视频,青铜器瓷器的图难找,AI怎么自动扒文物素材?
人工智能·音视频
happylifetree16 分钟前
Python72:核心语法-类型注解-函数的类型注解
python
LUSTER凌云光17 分钟前
最高146kHz行频,RGB+NIR同步成像:高速多光谱线阵相机如何提升工业检测效率?
人工智能
shxjnpl18 分钟前
粤语医患对话如何转成电子病历?从方言 ASR 到端侧离线语音处理
人工智能·语音识别·实时音视频
段一凡-华北理工大学19 分钟前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章04:智能烧炉:燃烧控制与空燃比优化的实战逻辑
人工智能·能源·高炉机器视觉·高炉能源优化·热风炉智能控制
liudachu22 分钟前
Agent 开发常见名词说明与类比
python·langchain
devilnumber23 分钟前
Lambda 表达式(Java)优缺点清晰分析
java·开发语言·python