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

ResNet模型验证与手动测试阶段准确率差异原因排查

验证准确率与手动计算准确率不一致的原因分析

核心原因1:两次计算使用的验证数据集完全不同

代码中每次调用get_dataloader()都会重新生成全新的随机数据:

def get_dataloader():
    # Create a simple synthetic dataset for demonstration purposes
    x = torch.randn(100, 3, 224, 224)
    y = torch.randint(0, 2, (100, 1)).float()
    dataset = TensorDataset(x, y)
    return DataLoader(dataset, batch_size=8)
  • 训练阶段使用的val_loader是第一次调用生成的随机数据集
  • 手动测试时再次调用get_dataloader()生成了另一组完全不同的随机数据
    两者的样本分布、标签都没有关联,计算的是不同数据集的准确率,数值自然存在差异。

核心原因2:手动测试时模型未切换到评估模式

PyTorch Lightning在执行validation_step时,会自动将模型切换到评估模式(model.eval()),此时会关闭dropout、冻结BatchNorm的统计量;但手动测试时直接调用model.predict_step,模型默认处于训练模式(model.train()),训练模式下的随机化行为(比如dropout)会导致预测结果和验证阶段的输出不一致,进一步放大准确率差异。

修复方案

  1. 复用同一验证数据集:提前生成一次验证数据集,训练和手动测试都使用它
# 提前生成固定的验证数据集
val_dataset = TensorDataset(torch.randn(100, 3, 224, 224), torch.randint(0, 2, (100, 1)).float())
val_loader = DataLoader(val_dataset, batch_size=8)
# 训练和手动测试都使用这个val_loader
  1. 手动测试前切换模型到评估模式:
model.eval()
with torch.no_grad():
    # 执行预测和手动计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:24:55