莫凡2017tensorflow(使用更简便版)https://github.com/MorvanZhou/Tensorflow-Tutorial
CNN卷积神经网络(Convolutional Neural Networks)
https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-03-A-CNN/
在前面的分类学习中(17),MNIST库求出的精确度达到87%多,这个准确率对于目前的技术来说相对较低。如果想要提升准确率,就要用到CNN,可达到96%。
卷积神经网络是近些年逐步兴起的一种人工神经网络结构, 因为利用卷积神经网络在图像和语音识别方面能够给出更优预测结果, 这一种技术也被广泛的传播可应用. 卷积神经网络最常被应用的方面是计算机的图像识别。
我们先把卷积神经网络这个词拆开来看. “卷积” 和 “神经网络”. 卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解. 具体来说, 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现。
如果是彩色照片, 就可能有红绿蓝三种颜色的信息, 这时的高度为3. 我们以彩色照片为例子. 过滤器就是影像中不断移动的东西, 他不断在图片收集小批小批的像素块, 收集完所有信息后, 输出的值, 我们可以理解成是一个高度更高,长和宽更小的”图片”. 这个图片里就能包含一些边缘信息. 然后以同样的步骤再进行多次卷积, 将图片的长宽再压缩, 高度再增加, 就有了对输入图片更深的理解. 将压缩,增高的信息嵌套在普通的分类神经层上,我们就能对这种图片进行分类了.
卷积神经网络包含输入层、隐藏层和输出层,隐藏层又包含卷积层和池化(pooling)
层,图像输入到卷积神经网络后通过卷积来不断的提取特征,每提取一个特征就会增加一个feature map
,所以会看到视频教程中的立方体不断的增加厚度,那么为什么厚度增加了但是却越来越瘦了呢,哈哈这就是pooling
层的作用喽,pooling
层也就是下采样(图像尺寸减半),通常采用的是最大值pooling
和平均值pooling
,因为参数太多喽,所以通过pooling
来稀疏参数,使我们的网络不至于太复杂。
padding:决定在进行卷积或池化操作时,是否对输入的图像矩阵边缘补0,'SAME' 为补零,'VALID' 则不补,其原因是因为在这些操作过程中过滤器可能不能将某个方向上的数据刚好处理完。也就是说,决定卷积后的长宽是否要与原图一致。
pooling:池化层又称下采样,它的作用是减小数据处理量同时保留有用信息。池化层的作用可以描述为模糊图像,丢掉了一些不是那么重要的特征.(https://www.cnblogs.com/fydeblog/p/7450413.html)
tf.nn.max_pool()最大池化
tf.nn.avg_pool平均池化
(https://www.cnblogs.com/White-xzx/p/9497029.html)
- 池化(pooling)
研究发现, 在每一次卷积的时候, 神经层可能会无意地丢失一些信息. 这时, 池化 (pooling) 就可以很好地解决这一问题. 而且池化是一个筛选过滤的过程, 能将 layer 中有用的信息筛选出来, 给下一个层分析. 同时也减轻了神经网络的计算负担 (具体细节参考). 也就是说在卷积的时候,