利用CNN进行手写数字识别

资源下载地址:https://download.csdn.net/download/sheziqiong/85884967
资源下载地址:https://download.csdn.net/download/sheziqiong/85884967

利用 CNN 进行手写数字识别

实验目的和要求

利用 CNN 进行手写数字识别

框架:TenserFlow(PyTorch 也行)

数据集:The Mnist Database of handwritten digits

网络结构:LeNet-5;

具体任务:

利用上述数据集/网络结构/框架实现手写数字识别,可以参考代码

参考链接:

实验内容和原理

CNN

卷积神经网络(CNN)是一种特殊的多层神经网络。像几乎所有其他的神经网络一样,它也是用反向传播算法来训练的,只是用特殊结构来以更少的预处理识别像素图中的 pattern。而且它对一些简单的几何变换有一定的鲁棒性。

基础的 CNN 由卷积(convolution), 激活(activation), 和池化(pooling)三种结构组成。当处理图像分类任务时,我们会把 CNN 输出的特征空间作为全连接层或全连接神经网络(fully connected neural network, FCN)的输入,用全连接层来完成从输入图像到标签集的映射,即分类。当然,整个过程最重要的工作就是如何通过训练数据迭代调整网络权重,也就是后向传播算法。目前主流的卷积神经网络(CNNs),比如 VGG, ResNet 都是由简单的 CNN 调整,组合而来。
卷积过程就是 kernel 所有权重与其在输入图像上对应元素亮度之和,即

在这里插入图片描述

池化

池化(pooling),是一种降采样操作(subsampling),主要目标是降低 feature maps 的特征空间,或者可以认为是降低 feature maps 的分辨率。因为 feature map 参数太多,而图像细节不利于高层特征的抽取。

在这里插入图片描述

Pooling 操作会降低参数,降低 feature maps 的分辨率,但是这种暴力降低在计算力足够的情况下是不是必须的,并不确定。目前一些大的 CNNs 网络只是偶尔使用 pooling。

全连接网络

在这里插入图片描述

不同于 CNN 的滑动卷积,全连接网络每一层的所有单元与上一层完全连接。对于第 l 层的第 i 个神经元,它的输出计算方式是,

在这里插入图片描述

目标函数和训练方法

假设得到的误差为 E,则在更新时有有

在这里插入图片描述

其中

在这里插入图片描述

是 learning rate,相当于每次学习的步长。然后通过 BP 来一层层往前调整参数进行学习。

在这里插入图片描述

BP 算法通过以下四个公式更新:

在这里插入图片描述

LeNet-5

是一种用来进行手写字母识别的网络,LeNet-5 中主要有 2 个卷积层、2 个下抽样层(池化层)、3 个全连接层,如图。

在这里插入图片描述
在这里插入图片描述

实验步骤与分析

实验中试了各种 optimizer 和 loss 函数,发现效果差距很大。

然后尝试了对自己用画图制作的数据集进行识别,效果也不错。

实验结果

学习率都是 0.01,只是换了 Loss 和 Optimizer,效果差异显著 x

Loss:直接返回 X,Optimizer:Adadelta

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
资源下载地址:https://download.csdn.net/download/sheziqiong/85884967
资源下载地址:https://download.csdn.net/download/sheziqiong/85884967

猜你喜欢

转载自blog.csdn.net/sheziqiong/article/details/125590618