利用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 所有权重与其在输入图像上对应元素亮度之和,即

扫描二维码关注公众号,回复: 14355624 查看本文章

在这里插入图片描述

池化

池化(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