tensorflow入门学习,卷积和池化在图片识别中,到底是如何工作的(四)
发表于: 2018-06-24 16:50:22 | 已被阅读: 51 | 分类于: tensorflow
上一节介绍了 建立多层卷积网络模型,提升MNIST手写数字识别正确率到99%(三),结合卷积
和池化
,建立了多层的 tensorflow 网络模型,提升了手写数字识别的正确率。不过,上一节的主要目的是介绍 tensorflow 建立多层网络模型的总体流程,对卷积
和池化
在识别图片中如何工作没怎么说明,这一节,将详细介绍。
提出问题
假设有如下两种类型图片,需要分辨给出的图片含有
计算机非常死板,如果简单的比对像素,哪怕只有 1 个像素不对,也是难以分辨的。而 tensorflow 就非常适合解决这类问题,上一节提到利用卷积和池化建立多层网络,可以实现非常高的准确率。它们到底是如何工作的呢?
卷积在图像识别中的作用
下边右图,并不完全等于左图,但是人脑会根据某些局部特征判断,右图中含有 X。卷积的作用就在此,它可以把这些局部特征提取出来。
那么,卷积如何提取出局部特征呢?下图,咱们只看白色部分,可以很清楚的看出,它们到底是提取什么特征的。
上图就是所谓的
计算卷积,只需将两个小块对应位置的像素值进行乘法运算,然后将整个小块内乘法运算的结果加起来,最后再除以像素点总个数即可。下图是匹配过程的几个代表性的图片,可以看出,卷积核从原图提取出了符合自己的局部特征。
最终,整个原图分析完毕,得到下图。
得到的数据越接近 1,说明与
池化在图像识别中的作用
池化可以减少数据规模,但是又保留特征。最常用的是 2x2 最大值池化,即,取 2x2 像素大小的方块内的最大值,池化过程类似于卷积,也是移动操作的。2x2 池化操作后,数据规模相对于原数据,减小了 4 倍。
下面几张图,是对本节数据池化的几个示意图。
对卷积得到的 3 幅图做完池化操作,得到:
最大值池化保留每一个小块内的最大值,相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。
为什么要使用 ReLU 激活函数?
ReLU 函数非常简单,它把小于 0 的值归零,大于 0 的值保持不变,有点
ReLU 函数似乎也不会引起梯度衰退,尤其适合深度学习网络。 下面几张图是 ReLU 函数的操作结果。
建立卷积深度学习网络
将上面介绍的
多组合几层,就得到了
全连接层的作用
经过多层的卷积深度学习网络,一副图片最终会被池化成数据量较小的几个二维数据组,将它们转换为一维:
这样,识别图片属于 X 还是 O 的问题,就变成了二分类问题。根据一些先验知识训练,就完成了图片识别。结果被判断为 X。
这一系类操作,就属于
全连接层也可以为多层。