没有合适的资源?快使用搜索试试~ 我知道了~
基于CNN神经网络的手写字符识别实验报告
资源推荐
资源详情
资源评论
基于 CNN 神经网络的手写字符识别实验报告
22050605
杨新莹
1. 实验目标和动机
实验的目标是使用 MNIST 数据集进行手写字符识别。MNIST 数据集包含许多
手写数字的图像,每个图像都是 28x28 像素的灰度图像,表示数字 0 到 9。
实验动机是探索使用卷积神经网络(CNN)进行图像识别任务,并比较不同
网络结构和参数配置对性能的影响。
输入数据: 28x28 像素的灰度图像
网络输出数据: 预测的数字类别
2. CNN 算法的基本原理
CNN 是一种专门用于处理图像数据的深度学习模型,其核心原理包括卷积层、
池化层和全连接层。
卷积神经网络利用卷积层来提取图像特征。卷积操作通过滑动卷积核在输入
图像上提取局部特征,这有助于捕获图像中的边缘、纹理等信息,并保留空间关
系。
池化层用于降维和减少特征图的大小,同时保留主要特征。最常见的池化操
作是最大池化,它从每个局部区域中选择最大值作为输出,减小了特征图的尺寸
并提高了计算效率。
全连接层通常位于网络的顶部,将卷积层和池化层提取的特征映射到输出类
别。全连接层通过学习权重参数,将特征映射到每个类别的概率,最终实现图像
分类。
激活层采用激活函数,把卷积层输出结果做非线性映射。在卷积层之后使用,
以增加网络的表达能力。常见的激活函数包括 ReLU(Rectified Linear Unit)、
Sigmoid 和 Tanh 等。ReLU 是最常用的激活函数,它能够有效缓解梯度消失问题,
并加速网络的收敛速度。
Softmax 层通常作为网络的最后一层,用于将全连接层的输出转换成各个类
别的概率分布。通过对这些概率进行比较,模型可以确定输入图像最可能属于哪
个类别。
3. LeNet5 网络基本架构
本实验使用 CNN 的经典模型 LeNet5 进行手写数字的识别。
LeNet-5 的基本结构包括 7 层网络结构(不含输入层),其中包括 2 个卷积
层、2 个降采样层(池化层)、2 个全连接层和输出层。
1)输入层(Input layer)
输入层接收大小为 28×28 的手写数字图像,其中包括灰度值(0-255)。在
本实验中对数据集进行预处理,数据进行了标准化,以加快训练速度和提高模型
的准确性。[28,28,1]
2)卷积层 C1(Convolutional layer C1)
卷积层 C1 包括 6 个卷积核,每个卷积核的大小为 5×5,步长为 1,填充为 0。
因此,每个卷积核会产生一个大小为 28×28 的特征图(输出通道数为 6)。
[28,28,6]
3)采样层 S2(Subsampling layer S2)
采样层 S2 采用最大池化(max-pooling)操作,每个窗口的大小为 2×2 ,
步长为 2。因此,每个池化操作会从 4 个相邻的特征图中选择最大值,产生一个
大小为 14×14 的特征图(输出通道数为 6)。[14,14,6]
4)卷积层 C3(Convolutional layer C3)
卷积层 C3 包括 16 个卷积核,每个卷积核的大小为 5×5 ,步长为 1,填充
为 0。因此,每个卷积核会产生一个大小为 10×10 的特征图(输出通道数为 16)。
[10,10,16]
5)采样层 S4(Subsampling layer S4)
采样层 S4 采用最大池化操作,每个窗口的大小为 2×2,步长为 2。因此,
每个池化操作会从 4 个相邻的特征图中选择最大值,产生一个大小为 5×5 的特
征图(输出通道数为 16)。[5,5,16]
6)全连接层 C5(Fully connected layer C5)
C5 将每个大小为 5×5 的特征图拉成一个长度为 400 的向量,并通过一个带
有 120 个神经元的全连接层进行连接。120 是由 LeNet-5 的设计者根据实验得到
的最佳值。[400,]->[120,]
7)全连接层 F6(Fully connected layer F6)
全连接层 F6 将 120 个神经元连接到 84 个神经元。[84,]
8)输出层(Output layer)
输出层由 10 个神经元组成,每个神经元对应 0-9 中的一个数字,并输出最
终的分类结果。在训练过程中,使用交叉熵损失函数计算输出层的误差,并通过
反向传播算法更新卷积核和全连接层的权重参数。[10,]
4. 核心架构的具体实现
#
构建
LeNet-5
模型
model = models.Sequential([
layers.Conv2D(6, kernel_size=(5, 5), strides=(1, 1), activation='relu', input_shape=(28, 28, 1),
padding='same'),
layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'),
layers.Conv2D(16, kernel_size=(5, 5), strides=(1, 1), activation='relu', padding='valid'),
layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'),
layers.Flatten(),
layers.Dense(120, activation='relu'),
layers.Dense(84, activation='relu'),
layers.Dense(10, activation='softmax')
])
#
编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
#
训练模型
history = model.fit(train_images, train_labels, epochs=10, batch_size=16,
validation_data=(test_images, test_labels))
5. 网络训练和推理过程及说明
网络训练过程:
·准备数据: 首先需要准备训练数据集和验证数据集。训练数据集通常用来训练
模型的参数,验证数据集用来评估模型在训练过程中的性能。
·构建模型: 定义 LeNet5 模型的架构,包括输入层、隐藏层、输出层以及它们
之间的连接关系。这里通过深度学习框架 TensorFlow 来实现。
·定义损失函数和优化器: 选择交叉熵作为损失函数和 Adam 作为优化器。
·训练模型: 将模型与训练数据集进行训练,通过反向传播算法不断优化模型参
数,使得模型能够更好地拟合训练数据。
·评估模型: 使用验证数据集评估训练得到的模型的性能,观察模型在验证集上
的表现,并根据评估结果进行调参和优化。
网络推理过程
·准备输入数据: 对于需要进行推理的新数据,首先需要进行预处理,使其能够
输入到训练好的模型中进行推理。
·加载模型: 从保存的模型参数中加载训练好的模型。
·模型推理: 将输入数据通过加载的模型进行前向传播,得到模型的输出结果。
·输出结果
剩余17页未读,继续阅读
资源评论
全是头发的羊羊羊
- 粉丝: 304
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功