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

PyTorch修改预训练ResNet18全连接层后预测仅输出单类别问题求助

问题排查与修复方案

  • 优先检查推理阶段是否调用model.eval()
    训练完成后执行预测前必须执行该方法,将BatchNorm、Dropout等层切换为推理模式。如果遗漏该步骤,上述层会保留训练阶段的随机逻辑,导致每次前向传播输出结果不稳定,甚至出现全输出单类的情况。
  • 核对训练与预测阶段的预处理逻辑是否一致
    确认预测时的图像缩放、裁剪、归一化操作和训练阶段的配置完全相同,尤其是归一化用到的均值、方差参数,必须和训练集计算得到的参数一致,不能直接混用ImageNet默认参数,避免输入分布漂移导致模型失效。
  • 确认损失函数与输出层匹配
    PyTorch的CrossEntropyLoss内置了LogSoftmax和NLLLoss计算,因此修改后的fc层不需要额外加Softmax激活。如果输出层额外添加了Softmax,会导致计算损失时的梯度异常,模型容易出现类别塌缩的问题。
  • 检查模型保存与加载逻辑
    修改ResNet18全连接层后,保存模型时建议只保存权重:torch.save(model.state_dict(), "model.pth"),加载时先实例化修改后的ResNet18结构,再加载权重,避免结构不匹配导致的参数异常。
  • 固定全流程随机种子
    在notebook开头添加如下代码固定所有随机源,避免每次运行时模型初始化、数据打乱、算子运算的随机性导致训练结果不可复现:
    import random, torch, numpy as np
    seed = 42
    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    torch.backends.cudnn.deterministic = True
    
  • 验证训练准确率真实性
    检查训练集和验证集是否存在数据重叠,避免虚高的准确率误导判断。可以随机抽取几张不同类别的训练集图像执行预测,确认模型在训练集上是否能正确分类,排除模型完全未拟合的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:06:03