深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库

1、MNIST数据库特点

MNIST手写数字数据库具有60,000个示例的训练集和10,000个示例的测试集。它是NIST提供的更大集合的子集。数字已经过尺寸标准化,并以固定尺寸的图像为中心。
对于想要在真实数据上尝试学习技术和模式识别方法,同时在预处理和格式化方面花费最少的人来说,它是一个很好的数据库。

MNIST 数据集包含了四个部分:
train-images-idx3-ubyte:training set images
train-labels-idx1-ubyte:training set labels
t10k-images-idx3-ubyte:test set images
t10k-labels-idx1-ubyte:test set labels

MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员。 测试集(test set) 也是同样比例的手写数字数据。
所以我觉得MNIST 数据集可以保证数据多样性,让机器学习有更好的结果。
详细请看:MNIST数据库

2、原理

卷积神经网络的训练过程分为两个阶段。第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段。另一个阶段是当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传播训练的阶段,即反向传播阶段。
训练过程为:
1、网络进行权值的初始化;
2、输入数据经过卷积层、下采样层、全连接层的向前传播得到输出值;
3、求出网络的输出值与目标值之间的误差;
4、当误差大于我们的期望值时,将误差传回网络中,依次求得全连接层,下采样层,卷积层的误差。当误差等于或小于我们的期望值时,结束训练。
5、根据求得误差进行权值更新。然后再进入到第二步。

卷积神经网络的层级结构:
• 数据输入层/ Input layer
• 卷积计算层/ CONV layer
• ReLU激励层 / ReLU layer
• 池化层 / Pooling layer
• 全连接层 / FC layer

1、数据输入层

主要是对原始图像数据进行预处理,包括去均值,归一化和PCA/白化(用PCA降维;白化是对数据各个特征轴上的幅度归一化)。

2、卷积计算层

两个关键操作:
• 局部关联。每个神经元看做一个滤波器(filter)
• 窗口(receptive field)滑动, filter对局部数据计算

3、ReLU激励层

ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱。

4、池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
池化层的具体作用就是图像的resize以及特征降维,在一定程度上防止过拟合,更方便优化。

5、全连接层

在卷积神经网络尾部,两层之间所有神经元都有权重连接。
神经网络全连接会出现参数爆炸问题,而利用局部卷积替换全连接结构可将参数减低。
CNN的训练与BP误差反传机制区别在于卷积层和Pooling层。

3、实验结果

每一个数据集里面都会有出错的,但是有的数字长得很怪异却可以识别正确,有些是字体的粗细就会影响识别结果。

1、长得怪异却识别正确的:
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第1张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第2张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第3张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第4张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第5张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第6张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第7张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第8张图片
2、识别错误的:
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第9张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第10张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第11张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第12张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第13张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第14张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第15张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第16张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第17张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第18张图片

里面的很多有圈或者勾之类的元素很可能会左右它的判断,比如9,写的确实有些像0。

3、特别的:

3.1 字体粗细是否有影响:

深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第19张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第20张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第21张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第22张图片

先看第一个图,很明显是1但是识别出来的结果却是3,所以非常奇怪,让我很迷惑。再看下面那两张1的图像,很明显是1,但是识别出来的结果是8,这个可能是因为写出来的字体比较粗的原因,所以我去找了其他数字集当中长得比较粗的字体识别,请看第二张图当中的3,虽然很粗的,但是不影响判断。所以是只有1才会因为字体粗细有影响。

3.2 字体之外的其他元素是否有影响(横线或者点):

深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第23张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第24张图片
深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第25张图片 深度学习(Tensorflow)之卷积神经网络(CNN)--mnist数据库_第26张图片

根据上面的图,可以判断字体上面的横线或者点都不会影响识别结果。
除此之外我发现0和6的识别几乎都不会出错,而2很容易识别成0,5容易识别出8等等。

参考博文:
卷积神经网络的训练过程
祥解MNIST数据集
卷积神经网络(CNN)总结

你可能感兴趣的:(python)