本项目是一个基于 PyTorch 框架的深度学习实验代码。主要通过构建卷积神经网络(CNN)对 MNIST 手写数字数据集进行识别,并深入对比了不同超参数与优化器对模型训练的影响。
- CNN 模型构建:利用卷积神经网络实现对手写数字的准确识别。
- 梯度范数验证:计算并可视化训练过程中的梯度 Frobenius 范数变化规律。
- 学习率对比:对比不同学习率(0.1, 0.01, 0.001)下的模型收敛速度与准确率。
- 优化器对比:对比不同优化算法(SGD, Adam, AdaGrad, RMSProp)的性能差异。
- 动态模型评估:自动挑选测试集表现最佳的模型,并对其预测结果进行可视化。
在运行代码之前,请确保你的环境中安装了以下 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 的变化曲线。
- 📊
2a_lr_train_acc.png:不同学习率下的 训练集准确率 对比。 - 📊
2b_lr_test_acc.png:不同学习率下的 测试集准确率 对比。 - 📉
2c_lr_train_loss.png:不同学习率下的 训练集损失 (Loss) 对比。 - 📉
2d_lr_test_loss.png:不同学习率下的 测试集损失 (Loss) 对比。
- 📊
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)
- 绿色字体:预测正确 (