本项目实现了多个经典的卷积神经网络模型,并在MNIST手写数字识别任务上进行了全面的对比实验。
- 了解Keras,熟悉使用Keras时的深度学习基础概念
- 了解Keras的主要层,创建核心模型
- 掌握基于深度学习实现基本应用的流程
- 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 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
- 克隆或下载项目
cd /path/to/project- 安装依赖
pip install -r requirements.txt- 验证安装
python -c "import tensorflow as tf; print(tf.__version__)"python main.py然后根据菜单提示选择要执行的操作。
python main.py --fullpython main.py --trainpython main.py --augmentationpython main.py --visualizepython main.py --test-custompython main.py --full --quickpython train_model.pypython data_augmentation_comparison.pypython visualize_results.py --allpython test_custom_images.py --all训练所有模型并在MNIST测试集上评估性能,比较:
- 识别准确率
- 训练时间
- 推理时间
- 模型参数量
对比使用和不使用数据增强的性能差异:
- 旋转(±10度)
- 平移(±10%)
- 缩放(±10%)
- 错切变换(±10%)
比较不同优化器的效果:
- SGD (Stochastic Gradient Descent)
- Adam
- RMSprop
使用自己绘制的手写数字进行测试,评估模型泛化能力。
- 创建
custom_images文件夹 - 准备黑底白字的手写数字图片(28x28像素)
- 按照格式命名:
数字_序号.png(例如:0_1.png,1_1.png)
详细说明请参考:CUSTOM_IMAGES_GUIDE.md
使用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日志文件
实验会从以下几个方面对模型进行评估:
- 准确率: 在测试集上的分类准确率
- 训练时间: 完成训练所需的时间
- 推理时间: 对测试集进行预测的时间
- 参数量: 模型的总参数数量
- 收敛速度: 达到目标准确率所需的epoch数
卷积神经网络通过参数共享,使卷积层的参数数量比全连接层大幅减少,从而使搭建更深的神经网络成为可能。
-
LeNet-5
- 使用平均池化
- 结构简单,适合入门学习
- 参数量较少
-
AlexNet
- 使用ReLU激活函数
- 引入Dropout防止过拟合
- 使用重叠的最大池化
- 数据增强技术
-
VGG16
- 使用小的3x3卷积核堆叠
- 网络结构简单统一
- 参数量较大
-
GoogLeNet
- 引入Inception模块
- 多尺度特征提取
- 使用全局平均池化