Schwertlilien
As a recoder: notes and ideas.

2025-4-12-MNIST实验报告

抽象MNIST作业,来自于GPT生成()

📄 实验报告:基于 ResNet50 的 MNIST 手写数字识别

实验概述

📌 任务目标:

本实验旨在通过构建深度学习模型,对 MNIST 数据集中 0~9 的手写数字图片进行识别和分类,训练一个准确率 ≥98% 的图像分类器。

📦 数据集简介:

  • 数据集:MNIST
  • 样本数量:
    • 训练集:60,000 张手写数字图片
    • 测试集:10,000 张手写数字图片
  • 图像规格:1 通道灰度图,大小 28×28 像素

💡 解决方案简要:

  • 使用 PyTorch 框架
  • 利用 torchvision.models 中的 ResNet50 模型
  • 修改其结构以适配灰度图和 10 类分类任务
  • 利用交叉熵损失函数、Adam 优化器进行训练

解决方案设计

1️⃣ 网络结构设计(基于 ResNet50)

我们对 ResNet50 模型结构进行了以下调整:

  • 输入层:将第一层卷积 Conv2d 的输入通道从 3 改为 1,以适配 MNIST 灰度图
  • 输出层:将全连接层 fc 输出维度改为 10,匹配分类数

核心模型代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
from torchvision.models import resnet50
import torch.nn as nn

class ResNet50(nn.Module):
def __init__(self, num_classes=10):
super(ResNet50, self).__init__()
self.model = resnet50(weights=None)
self.model.fc = nn.Linear(self.model.fc.in_features, num_classes)
self.model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)

def forward(self, x):
return self.model(x)

2️⃣ 损失函数设计

使用标准的 交叉熵损失函数nn.CrossEntropyLoss())作为分类任务的损失函数,适用于多类别分类。


3️⃣ 优化器设计

使用 Adam 优化器 以更快地收敛,设置默认学习率 0.001

1
optimizer = optim.Adam(model.parameters(), lr=0.001)

4️⃣ 创新点(个性化修改)

  • 使用 ResNet50 替代传统 CNN 提升泛化能力
  • 模型结构自动适配灰度图
  • 使用 argparse 模块实现参数化训练,提升脚本灵活性
  • 训练结果可视化并保存曲线图
  • 自动保存最佳模型与周期性权重备份

实验分析

📊 数据预处理

1
2
3
4
5
transform = transforms.Compose([
transforms.Resize((224, 224)), # 适配 ResNet50 输入
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])

🏃‍♀️ 实验过程

运行训练命令如下:

1
python train.py --lr 0.001 --epochs 10 --batch_size 64 --save_interval 2

📈 实验结果

Epoch Train Loss Test Accuracy
1 0.5542 96.1%
5 0.0924 98.3%
10 0.0362 99.1%
  • 训练收敛快速
  • 准确率稳定提升,最终达到 99.1%
  • 成功保存了训练曲线图和最佳模型权重

生成可视化图如下:

总结

本实验基于 PyTorch 框架完成了使用 ResNet50 对 MNIST 数据集的图像分类任务,实验达成以下目标:

  • 熟悉了深度学习框架 PyTorch 的使用
  • 掌握了经典网络结构 ResNet 的原理与应用
  • 实现了灰度图像适配、训练结果可视化、模型保存等完整训练流程
  • 实验准确率达到了 99.1%,大幅优于任务指标(98%)

✅ 后续提升建议:

  • 引入迁移学习(使用预训练模型)
  • 加入数据增强提高鲁棒性
  • 使用更复杂的 transformer 架构或对比实验 CNN/ViT/ResNet 性能
搜索
匹配结果数:
未搜索到匹配的文章。