Skip to content
bugmaker-zzzPublic

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation


深度学习作业:基于 CNN 的 MNIST 图像分类与对比实验

本项目是一个基于 PyTorch 框架的深度学习实验代码。主要通过构建卷积神经网络(CNN)对 MNIST 手写数字数据集进行识别,并深入对比了不同超参数与优化器对模型训练的影响。

🎯 实验目的

  1. CNN 模型构建:利用卷积神经网络实现对手写数字的准确识别。
  2. 梯度范数验证:计算并可视化训练过程中的梯度 Frobenius 范数变化规律。
  3. 学习率对比:对比不同学习率(0.1, 0.01, 0.001)下的模型收敛速度与准确率。
  4. 优化器对比:对比不同优化算法(SGD, Adam, AdaGrad, RMSProp)的性能差异。
  5. 动态模型评估:自动挑选测试集表现最佳的模型,并对其预测结果进行可视化。

🛠️ 环境依赖

在运行代码之前,请确保你的环境中安装了以下 Python 库:

pip install torch torchvision matplotlib

🚀 如何运行

本代码采用了 matplotlib.use('Agg') 后端,运行过程中所有可视化结果将静默保存在当前目录下。

在终端执行以下命令即可运行完整实验:

python main.py  # 假设你的代码文件名为 main.py

(注:代码会自动检测运行环境。如果有 NVIDIA GPU 或 Apple Silicon (MPS),将自动调用 GPU 加速训练;否则使用 CPU。)

📂 产出文件说明 (用于编写实验报告)

运行结束后,当前目录下会自动生成以下 11 张图片:

数据集展示

  • 🖼️ 0_mnist_samples.png:MNIST 训练集随机抽样的 12 张图片及真实标签。

要求 ②:梯度范数验证

  • 📉 1_gradient_frobenius_norm_SGD.png:SGD 优化器在训练过程中,模型梯度的 Frobenius 范数(L2 范数)随 Epoch 的变化曲线。

要求 ③:比较不同学习速率 (控制变量:SGD)

  • 📊 2a_lr_train_acc.png:不同学习率下的 训练集准确率 对比。
  • 📊 2b_lr_test_acc.png:不同学习率下的 测试集准确率 对比。
  • 📉 2c_lr_train_loss.png:不同学习率下的 训练集损失 (Loss) 对比。
  • 📉 2d_lr_test_loss.png:不同学习率下的 测试集损失 (Loss) 对比。

要求 ④:比较不同优化器 (控制变量:lr=0.001)

  • 📊 3a_opt_train_acc.png:不同优化器下的 训练集准确率 对比。
  • 📊 3b_opt_test_acc.png:不同优化器下的 测试集准确率 对比。
  • 📉 3c_opt_train_loss.png:不同优化器下的 训练集损失 (Loss) 对比。
  • 📉 3d_opt_test_loss.png:不同优化器下的 测试集损失 (Loss) 对比。

终极效果可视化

  • 🎯 4_final_predictions_visualization.png:系统自动打擂台选出的 Best Model(例如 Adam)在测试集上的预测可视化。
    • 绿色字体:预测正确 (Pred == True)
    • 红色字体:预测错误 (Pred != True)

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages