Skip to content

hzy2005/MNIST-CNN-Model-Zoo

Repository files navigation

深度学习模型初探 - MNIST手写数字识别实验

实验概述

本项目实现了多个经典的卷积神经网络模型,并在MNIST手写数字识别任务上进行了全面的对比实验。

实验目的

  1. 了解Keras,熟悉使用Keras时的深度学习基础概念
  2. 了解Keras的主要层,创建核心模型
  3. 掌握基于深度学习实现基本应用的流程

实现的模型

  • LeNet-5: 最早的卷积神经网络之一,由Yann LeCun提出
  • AlexNet: 2012年ImageNet竞赛冠军,深度学习的里程碑
  • VGG16: 使用小卷积核堆叠的深度网络
  • GoogLeNet (Inception v1): 引入Inception模块的创新架构
  • 全连接网络: 作为基准对比

项目结构

.
├── models/                          # 模型定义
│   ├── lenet.py                    # LeNet-5模型
│   ├── alexnet.py                  # AlexNet模型
│   ├── vgg16.py                    # VGG16模型
│   └── googlenet.py                # GoogLeNet模型
│
├── utils.py                         # 工具函数
├── train_model.py                  # 模型训练脚本
├── data_augmentation_comparison.py # 数据增强对比实验
├── test_custom_images.py          # 自定义图片测试
├── visualize_results.py           # 结果可视化
├── main.py                         # 主程序入口
├── FC.py                           # 原始全连接网络示例
│
├── results/                        # 实验结果(自动生成)
├── saved_models/                   # 保存的模型(自动生成)
├── logs/                           # TensorBoard日志(自动生成)
└── custom_images/                  # 自定义测试图片(需手动创建)

环境要求

Python版本

  • Python 3.7+

依赖包

tensorflow>=2.0.0
keras>=2.3.0
numpy>=1.18.0
matplotlib>=3.1.0
pillow>=7.0.0
scikit-learn>=0.22.0

安装步骤

  1. 克隆或下载项目
cd /path/to/project
  1. 安装依赖
pip install -r requirements.txt
  1. 验证安装
python -c "import tensorflow as tf; print(tf.__version__)"

使用方法

方法1: 交互式菜单(推荐)

python main.py

然后根据菜单提示选择要执行的操作。

方法2: 命令行参数

运行完整实验流程

python main.py --full

仅训练所有模型

python main.py --train

仅运行数据增强对比实验

python main.py --augmentation

仅生成可视化结果

python main.py --visualize

仅测试自定义图片

python main.py --test-custom

快速测试模式(使用较少的epoch)

python main.py --full --quick

方法3: 单独运行各个脚本

训练模型

python train_model.py

数据增强对比

python data_augmentation_comparison.py

生成可视化

python visualize_results.py --all

测试自定义图片

python test_custom_images.py --all

实验内容

1. 模型训练与评估

训练所有模型并在MNIST测试集上评估性能,比较:

  • 识别准确率
  • 训练时间
  • 推理时间
  • 模型参数量

2. 数据增强实验

对比使用和不使用数据增强的性能差异:

  • 旋转(±10度)
  • 平移(±10%)
  • 缩放(±10%)
  • 错切变换(±10%)

3. 优化器对比

比较不同优化器的效果:

  • SGD (Stochastic Gradient Descent)
  • Adam
  • RMSprop

4. 自定义图片测试

使用自己绘制的手写数字进行测试,评估模型泛化能力。

准备自定义图片

  1. 创建 custom_images 文件夹
  2. 准备黑底白字的手写数字图片(28x28像素)
  3. 按照格式命名:数字_序号.png(例如:0_1.png, 1_1.png

详细说明请参考:CUSTOM_IMAGES_GUIDE.md

5. 训练过程可视化

使用TensorBoard查看训练过程:

tensorboard --logdir=./logs

然后在浏览器中打开 http://localhost:6006

实验结果

输出文件

实验完成后,会在以下目录生成结果:

  • results/: 各种图表和分析结果

    • model_comparison.png: 模型性能对比图
    • *_training_history.png: 各模型训练历史曲线
    • EXPERIMENT_REPORT.md: 综合实验报告
    • architectures/: 模型架构图
    • confusion_matrices/: 混淆矩阵
    • predictions/: 预测样本可视化
  • saved_models/: 训练好的模型文件

    • *_final.h5: 最终模型
    • *_best.h5: 验证集上表现最好的模型
  • logs/: TensorBoard日志文件

性能指标

实验会从以下几个方面对模型进行评估:

  1. 准确率: 在测试集上的分类准确率
  2. 训练时间: 完成训练所需的时间
  3. 推理时间: 对测试集进行预测的时间
  4. 参数量: 模型的总参数数量
  5. 收敛速度: 达到目标准确率所需的epoch数

实验要点

卷积神经网络原理

卷积神经网络通过参数共享,使卷积层的参数数量比全连接层大幅减少,从而使搭建更深的神经网络成为可能。

经典CNN结构特点

  1. LeNet-5

    • 使用平均池化
    • 结构简单,适合入门学习
    • 参数量较少
  2. AlexNet

    • 使用ReLU激活函数
    • 引入Dropout防止过拟合
    • 使用重叠的最大池化
    • 数据增强技术
  3. VGG16

    • 使用小的3x3卷积核堆叠
    • 网络结构简单统一
    • 参数量较大
  4. GoogLeNet

    • 引入Inception模块
    • 多尺度特征提取
    • 使用全局平均池化

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages