You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch训练保存的FER模型加载后测试精度波动问题求助

问题解决:加载PyTorch模型后测试精度不一致的修复方法

核心原因与对应解决方案

1. 数据加载环节存在随机性

测试集加载器若开启shuffle=True,或使用了随机裁剪、翻转等数据增强操作,会导致每次输入模型的数据顺序/内容不同,直接引发精度波动。

  • 修复操作:
    • 测试集DataLoader强制设置shuffle=False
    • 移除测试阶段所有随机化的图像预处理操作
      示例代码:
    test_transform = transforms.Compose([
        transforms.Resize((224, 224)),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
        # 删除随机裁剪、随机翻转等训练阶段用的增强操作
    ])
    test_loader = DataLoader(dataset=test_dataset, batch_size=32, shuffle=False, num_workers=4)
    

2. 模型未正确切换至评估模式

尽管你的测试函数中调用了model.eval(),但如果加载模型后未再次显式调用,Dropout、BatchNorm等层仍会处于训练模式,导致输出不稳定。

  • 修复操作:
    加载模型后必须立即调用model.eval(),确保所有层切换到评估状态
    示例加载代码:
    model = YourFERModel()  # 初始化与训练时完全一致的模型结构
    model.load_state_dict(torch.load("model.pth"))
    model.to(DEVICE)
    model.eval()  # 关键步骤,不可省略
    

3. 未固定全局随机种子

PyTorch、NumPy、Python的全局随机种子会影响数据加载、CUDA运算等环节的随机性,即使模型参数固定,种子不同也会导致结果波动。

  • 修复操作:
    在测试脚本开头固定所有相关随机种子:
    import torch
    import numpy as np
    import random
    
    def set_seed(seed=42):
        random.seed(seed)
        np.random.seed(seed)
        torch.manual_seed(seed)
        torch.cuda.manual_seed(seed)
        torch.cuda.manual_seed_all(seed)
        torch.backends.cudnn.deterministic = True
        torch.backends.cudnn.benchmark = False
    
    set_seed()
    

4. 模型保存/加载方式错误

直接保存整个模型(torch.save(model, PATH))可能因环境差异(PyTorch版本、模型定义路径)导致参数加载异常,更可靠的方式是仅保存模型状态字典。

  • 修复操作:
    保存时:
    torch.save(model.state_dict(), "model.pth")
    
    加载时:
    model = YourFERModel()  # 必须先匹配训练时的模型结构
    model.load_state_dict(torch.load("model.pth"))
    

针对你的测试函数的补充说明

你的test函数已正确使用model.eval()和torch.no_grad(),只需额外确保:

  • dataloaders['val']是无随机性的测试加载器(shuffle=False+无随机增强)
  • 加载模型后先执行model.eval()再调用测试函数

按上述步骤调整后,重新加载模型测试的精度将与训练结束时的测试结果完全一致。

内容的提问来源于stack exchange,提问作者PRAMOD KUMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:45:24