一、mnist数据描述

MNIST数据集是28×28像素的灰度手写数字图片,其中数字的范围从0到9

具体如下所示(参考自Tensorflow官方文档):
在这里插入图片描述在这里插入图片描述

二、原理

  受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网络在多个方向持续发力,在语音识别、人脸识别、通用物体识别、运动分析、自然语言处理甚至脑电波分析方面均有突破。

  卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。卷积神经网络的基本结构如图所示:
在这里插入图片描述

卷积神经网络由三部分构成。第一部分是输入层。第二部分由n个卷积层和池化层的组合组成。第三部分由一个全连结的多层感知机分类器构成。

2.1网络结构

卷积神经网络一般包含以下几层:

1. 输入层
卷积神经网络中输入层的结构可以是多维的,例如MNIST数据集中是28×28像素的灰度图片,因此输入为28×28的的二维矩阵。

2. 卷积层
卷积层是使用卷积核提取特征,在卷积层中需要理解局部感受野和共享权值。
在这里插入图片描述
上图为卷积操作示意图(图片来源于网络,侵删),其中Image表示图片数据矩阵,游走的窗口为卷积核矩阵,x0、x1表示的是权重,一个N×N的图像经过M×M的卷积核卷积后将得到(N-M+1)×(N-M+1)的输出。

卷积后输出的矩阵数据成为特征映射图,一个卷积核输出一个特征映射图,卷积操作是一种线性计算,因此通常在卷积后进行一次非线性映射。

3. 池化层
池化层是将卷积得到的特征映射图进行稀疏处理,减少数据量,操作与卷积基本相似,不同的是卷积操作是一种线性计算,而池化的计算方法更多样化,一般有如下计算方式:

最大池化:取样池中的最大值作为池化结果

均值池化:取样池中的平均值作为池化结果

还有重叠池化、均方池化、归一化池化等方法。

4. 全连接层
在网络的末端对提取后的特征进行恢复,重新拟合,减少因为特征提取而造成的特征丢失。全连接层的神经元数需要根据经验和实验结果进行反复调参。

5. 输出层
输出层用于将最终的结果输出,针对不同的问题,输出层的结构也不相同,例如MNIST数据集识别问题中,输出层为有10个神经元的向量。
**原理推导过程:**https://campoo.cc/cnn/

三、结果分析

1、数字1的错误识别
在这里插入图片描述
2、数字2的错误识别
在这里插入图片描述
3、数字3的错误识别
在这里插入图片描述
4、数字5的错误识别
在这里插入图片描述
5、数字6的错误识别
在这里插入图片描述
6、数字7的错误识别
在这里插入图片描述
7、数字8的错误识别
在这里插入图片描述
8、数字9的错误识别
在这里插入图片描述
1、当1写的粗一点就会被识别成8,7写得细一点也会被识别成1,测试图片中数字的粗细会对识别结果造成影响,如果图片中数字太细,在resize和不断的池化的过程中,有些比较关键的特征就会丢失,导致最后的识别错误。
2、对于比较相似的数字,例如3,8和5这三个数字,经常会出现识别错误的情况,在测试图片数字不那么端正的情况下,经常出现混淆的情况。

参考博文:原文:https://blog.csdn.net/greedystar/article/details/80444519

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐