Press "Enter" to skip to content

利用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

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。