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

图像分类模型测试精度极低,代码是否存在Bug?求优化方案

自定义图像分类任务问题排查与解决方案

一、代码中的致命Bug

  • 模型模式错误:加载预训练ResNet后调用了resnet.eval(),这会将批量归一化(BN)、Dropout等层切换为评估模式,训练时这些层无法更新参数,模型根本无法有效学习。
  • 变量名与计数逻辑错误:
    • 训练函数参数为optimiser,但代码中使用未定义的optimizer(拼写错误),会直接抛出运行时错误;
    • 训练准确率计算时使用了未定义的train_correct变量,实际统计的是correct;
    • 样本计数错误:total +=1是按批次计数而非样本数,正确统计应为total += labels.size(0),这就是你看到训练精度虚高的核心原因——准确率计算完全错误。
  • 测试代码逻辑冗余:torch.max(outputs, 1)返回的第一个值是类别概率的最大值,第二个是类别索引,后续possible_scores= np.argmax(scores.detach().numpy())无意义,单样本场景下还会引发维度错误。

二、过拟合的潜在诱因(修复代码后需关注)

你的数据集每类仅约60张样本,87类的规模属于小样本场景,即使代码修复,仍可能存在过拟合问题:

  • 预训练模型微调策略错误:直接修改全连接层后训练所有参数,且使用0.01的大学习率,会破坏预训练的通用特征,导致模型快速过拟合。
  • 数据增强不足:未对自定义数据集做随机裁剪、翻转、色彩抖动等增强操作,样本多样性不足,模型易记住训练样本。
  • 正则化手段单一:仅依赖L2正则化(weight_decay),未结合Dropout、早停(Early Stopping)、标签平滑等手段。

三、适合小样本自定义分类的模型推荐

  • MobileNetV2/V3:轻量型模型,参数规模小,在小数据集上不易过拟合,同时具备良好的特征提取能力。
  • EfficientNet-B0/B1:通过复合缩放优化模型效率,小版本模型在小样本场景下表现稳定,泛化性优于大模型。
  • ViT-B/16(微调版):视觉Transformer,需采用小学习率(如1e-5)冻结大部分预训练层,仅微调最后几层,结合CutMix、MixUp等增强手段,可在小样本任务中取得不错效果。
  • Prototypical Network:专为小样本分类设计的模型,基于度量学习思路,适合每类样本数量极少的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:36:17