《python深度学习》笔记(十七):卷积神经网络基础

卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。

卷积神经网络主要应用是对图像进行特征提取实现图像的分类与识别

1.代码实现 

《python深度学习》笔记(十七):卷积神经网络基础_第1张图片

 2.代码原理

3.卷积层 

使用卷积层的原因是卷积运算的一个重要特点是,通过卷积运算,可以使原信号特征增强,并且降低噪音。 

 《python深度学习》笔记(十七):卷积神经网络基础_第2张图片

卷积层是CNN最重要的部分。它与传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块。卷积层被称为过滤器(filter)或者内核(kernel)。

1.过滤器(filter)所处理的节点矩阵的长和宽都是由人工指定的,这个节点矩阵的尺寸也被称为过滤器尺寸。常用的尺寸有3x3或5x5,而过滤层处理的矩阵深度和当前处理的神经层网络节点矩阵的深度一致。

2.步长 Stride:前面提到了对于一个区域,在进行计算完成之后要进行滑动,滑动的时候的的移动距离也就是这个Stride了,上面动态图stride=1.

3.填充 Padding: 考虑上面卷积地计算过程,对于图像靠近中间部分的像素会被 “重叠” 地计算很多次,相比之下,边缘地像素呢?只被计算了一次,这有点太不公平了啊。怎么让它也能多次计算呢?就是在边缘填充一些值:注意这里的填充值都是0,显然Padding的值不是我们需要的,所以不让他们的值影响网络,所以要使用0。除了保持边界信息,其实还有一个用处:补齐输入数据的差异,也很好理解,如果size不一样,那么在小地图片周围进行填充就可以了。padding=valid表示不填充,padding=same表示填充后的宽度和高度与输入相同。

 

 4.池化层

 池化层包括最大池化层和平均池化层,下面动态图表示的是最大池化层的原理。

《python深度学习》笔记(十七):卷积神经网络基础_第3张图片

池化层不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络参数的目的。使用池化层既可以加快计算速度也可以防止过拟合。池化层filter的计算不是节点的加权和,而是采用最大值或者平均值计算。使用最大值操作的池化层被称之为最大池化层(max pooling)(最大池化层是使用的最多的磁化层结构)。使用平均值操作的池化层被称之为平均池化层(mean pooling)。

一般来说,池化层有以下几个功能:

1.对 Feature Map 又进行一次特征提取,这也是减小数据量的操作
2.获取更抽象的特征,防止过拟合,提高泛化性
3.经过这个处理,对输入的微小变化有更大的容忍,也就是说如果数据有一些噪音,那么经过这个特征提取的过程,就一定程度上减小了噪音的影响。
最后一点要注意的是,池化层并非是卷积网络所必需的。一些新的CNN网络设计时候并没有使用池化层
 

5.全连接层

全连接层本质上就是一个分类器。在经过多轮卷积层和池化层的处理之后,在CNN的最后一般会由1-2个全连接层来给出最后的分类结果。经过几轮卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提取的过程。在提取完成之后,仍然需要使用全连接层来完成分类任务。

6.激活函数层

实际中,一般不单独写成一层,往往是与之前的卷积层绑定在一起的,这个作用其实就是进行去线性化(在笔记(十七)中有详细解释),在卷积网络中,一般使用的激励函数是 ReLu 函数和softmax函数,注意大多数情况下都不会使用 Sigmoid函数处理。

 7.为什么要使用卷积?

训练参数少,无论你的输入图像是多少维,你所需要训练的参数基本上与卷积层中使用的 filter 中的参数相关

②在卷积层中,同一个 filter 可以检测出图像中不同位置的边缘

③在卷积层中,输出矩阵的每一个单元值都只与输出矩阵的某块区域(而非全部区域)相关

8.参数比较

《python深度学习》笔记(十七):卷积神经网络基础_第4张图片

9.它是如何减少参数的?

第一,参数共享。相比全连接网络一个参数对应一个像素特征,卷积网络中一个卷积核(9个参数)与特征之间不是一一对应的,实现了参数共享。

第二,稀疏连接(对比全连接理解)。比如,我们看输入图像左上角的9个像素和卷积核进行卷积之后,对应得到的特征图中的左上角的1个像素(这个像素只会受到输入图像左上角的9个像素的影响,不会受到其他像素的影响)

10.为什么CNN的效果这么好?

Dense层学习到的是全局模式,涉及所有像素。而Conv2D学到的是局部模式,二维小窗口(3×3)中发现的模式(边缘、纹理)。

 这个重要的特性使得卷积神经网络具有两个重要特性,

①学到的模型具有平移不变形(某个地方学到的模式可用其他任何地方识别它,这样可以高效利用数据,只需较少的样本就能学到具有泛化能力的数据表示)。

②可以学到空间层次结构(第一个卷积层学习较小的局部模式,第二个学习由第一层组成的更大的模式)

最大池化层的作用是对特征图进行下采样,从而可以减少需要处理的特征图的元素个数,还能让连续的卷积层的观察窗口越来越大,从而引入空间过滤器的层级结构。

你可能感兴趣的:(#,《python深度学习》笔记,深度学习,cnn,python)