# 基于C语言构建CNN的手写数字识别 **Repository Path**: conv-factor/Handwritten-number-recognition ## Basic Information - **Project Name**: 基于C语言构建CNN的手写数字识别 - **Description**: 本项目的卷积神经网络使用C语言构建,包括前向传播和反向传播,可对手写数字体进行有效识别 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2021-10-08 - **Last Updated**: 2025-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于CNN的手写数字识别 本项目的卷积神经网络使用C语言构建,包括前向传播和反向传播,可对手写数字体进行有效识别 # 介绍 * 数据集使用MNIST数据集中的一小部分数据,大小为30x30,通道数为1,包含300张训练集与10张测试集 * 网络结构包括双通道的三层卷积和单通道的三层全连接。卷积操作使用的kernel为3x3,最后输出24x24的特征图;全连接首先将双通道的特征图扁平化到1x1152,而后降维到180->45->10,最后利用softmax输出10种类别的概率 # 环境依赖 * C/C++ 1.7.0 # 训练 * [x] 训练前确保数据已经存放在Training_set目录下 * 若希望采用预训练的网络参数,则输入y,否则输入n。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/1015/104745_db9eebbc_8134356.png "参数选择.PNG") * 输入训练的轮次,键入之后进入训练阶段,网络进行监督训练,通过后向传播进行参数的调整,使损失函数降低。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/1015/104800_f6ffd27b_8134356.png "轮次.PNG") * 训练过程:网络每10轮输出网络的训练信息,包括训练进度、交叉熵损失与学习率。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/1015/104811_ade9eebb_8134356.png "训练过程.PNG") # 测试结果 * 网络会读入训练过程中的最优参数进行测试,对测试集下的0-9的手写数字进行识别 ![输入图片说明](https://images.gitee.com/uploads/images/2021/1015/105004_6c4e7a41_8134356.png "测试过程.PNG") ![输入图片说明](https://images.gitee.com/uploads/images/2021/1015/105703_7bbd9bab_8134356.png "训练过程2.PNG") # 参考 1. [反向传播](https://www.cnblogs.com/charlotte77/p/5629865.html) 2. [卷积核求导](https://www.cnblogs.com/pinard/p/6494810.html#!comments)