项目背景源于光学字符识别(OCR)与智能表单处理等实际应用场景,手写数字识别是计算机视觉领域的经典入门问题,具有数据规范、任务明确、评估标准统一的特点。项目目标是掌握卷积神经网络(CNN)的设计原理与训练技巧,理解深度学习在图像分类任务中的优势,建立从数据加载、模型搭建、训练调试到性能评估的完整深度学习工程能力。
系统包含四大核心功能模块:(1)数据加载模块,支持本地MNIST文件读取或TensorFlow自动下载,输出60000张训练图像与10000张测试图像的归一化张量;(2)CNN模型构建模块,采用Conv2D卷积层+ReLU激活+MaxPooling2D池化层+Dropout正则化的经典LeNet改进架构,末端接全连接层与Softmax十分类输出;(3)训练优化模块,支持Adam自适应学习率优化、SparseCategoricalCrossentropy损失计算、EarlyStopping早停机制与训练历史记录;(4)评估可视化模块,输出测试集准确率、Top-K错误样本分析、训练/验证损失曲线与准确率曲线。核心功能路径为:数据加载(28×28灰度图)→归一化至[0,1]→CNN前向传播→反向传播优化→验证集监控→早停或轮次结束→测试集最终评估。
用户启动脚本后,系统自动检测本地MNIST数据,若缺失则调用TensorFlow内置接口从网络下载。数据预处理阶段将uint8像素值归一化为float32的0-1范围,标签保持0-9整数。模型训练阶段按配置批次(默认128张/批)迭代,每轮结束后计算验证集损失与准确率,若连续3轮无改善则触发EarlyStopping。训练完成后自动评估测试集,输出混淆矩阵与错误样例可视化,最终保存模型权重文件。
项目采用TensorFlow/Keras深度学习框架,技术栈包括TensorFlow 2.x(模型构建与自动微分)、Keras API(Sequential/Functional模型定义)、NumPy(数据预处理)、Matplotlib(训练曲线与错误样本可视化)。模型架构为改进LeNet-5:Input(28,28,1)→Conv2D(32,3×3)→MaxPool(2×2)→Conv2D(64,3×3)→MaxPool(2×2)→Flatten→Dense(128,ReLU)→Dropout(0.5)→Dense(10,Softmax)。优化器采用Adam(lr=0.001),损失函数为稀疏分类交叉熵,评估指标为准确率。
(1)数据预处理:将28×28灰度图像归一化至[0,1],标签无需One-Hot(使用SparseCategoricalCrossentropy);(2)模型搭建:设计2层卷积+2层池化+1层全连接+Dropout的轻量CNN,参数量约60万,在CPU环境下单轮训练约30秒;(3)训练策略:设置epochs=10,batch_size=128,验证集比例0.1,启用EarlyStopping(patience=3)防止过拟合;(4)量化结果:训练损失从初始0.45稳定下降至0.02,验证损失同步下降无发散;最终测试集准确率达99.01%,错误样本仅99张(10000张中),其中易混淆数字对为4-9、3-8、5-6。训练/验证准确率曲线高度重合,无明显过拟合迹象。