如何从零训练 ResNet-34(含代码仓库)

如何在 ImageNet-1K(2012 版本)从零训练 ResNet-34

我使用 PyTorch 从零实现并成功训练了 ResNet-34 模型,在 ImageNet-1K 上达到了原论文的性能:

  • 📜 原论文结果:Top-1 准确率约 73.3%,Top-5 准确率约 91.2%
  • ✅ 我的复现结果:
    Top-1 Accuracy:73.06%
    Top-5 Accuracy:91.39%
    Test Loss:2.001115(第 92 个 epoch)

当然,能达到原论文水平,少不了时代技术的进步、社区方法的积累,以及 GPT 先生🧑‍🏫 的鼎力协助。

📄 原论文链接:arXiv:1512.03385
📥 PDF下载:点击查看
💻 我的项目仓库:GitHub - JiJiBo/NasResnet
🎯 模型权重:百度网盘 提取码:koaq


第一步:准备数据集与增强策略

  • 使用的是 ImageNet 2012 数据集,约 140G。由于我用的是带数据集的云平台,只需解压即可。
  • 数据增强方面,训练集使用了:
    • AutoAugment(来自 EfficientNet 的增强策略)
    • RandomResizedCrop + HorizontalFlip + RandomErasing
  • 测试集只做 Resize + CenterCrop,避免增强干扰测试精度。
transform = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.RandomHorizontalFlip(),
    AutoAugment(policy=AutoAugmentPolicy.IMAGENET),
    transforms.ToTensor(),
    transforms.RandomErasing(p=0.25, scale=(0.02, 0.33)),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225]),
])

test_transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225])
])

第二步:构建 ResNet-34 模型

  • 使用原论文结构,模块包括 BasicBlock、四个层级的残差堆叠,最终是全局平均池化 + FC。
  • 所有权重采用 Kaiming 初始化,确保训练更稳定。

模型代码请见:model/resnet_18.py


第三步:训练策略和技巧

为了在 ImageNet 上稳定训练 ResNet-34,我引入了大量现代技巧:

类别技术
优化器SGD + Momentum (0.9),Weight Decay 1e-4
学习率策略StepLR,epoch=[30, 60, 90, 100, 110] 降 LR
初始化Kaiming 正态初始化
数据增强Mixup(前 50 epoch 生效)、AutoAugment、Random Erasing
损失函数CrossEntropyLoss + Label Smoothing (0.1)
梯度控制梯度裁剪(max_norm=3.0
复现控制设置固定随机种子,确保结果一致
训练日志TensorBoard 全记录,包括 loss、acc、LR、测试精度等

每个 epoch 大概耗时 20 分钟,约1天多可得较好结果。

最终结果如下(第 95 个 epoch):

Epoch 95: Top-1 Accuracy: 73.11% | Top-5 Accuracy: 91.39% | Test Loss: 1.999415

写在最后

训练过程中,我大量参考了原论文,同时结合 GPT 提供的建议,尝试了多种现代策略。不得不说,读原论文 + GPT 辅助探索
是非常高效的方式。但也要警惕 GPT 有时“犯迷糊”,关键点还得靠自己判断和实证。

如果你也想复现 ResNet,或者在 ImageNet 上训练自己的模型,我的这份工程代码和经验总结应该能帮到你。

欢迎提 Issue、PR 或交流想法,一起精进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值