文章目录
【卷积神经网络】(零 )卷积层,池化层
一般的全连接神经网络(DNN)结构如下图所示:
一般的卷积神经网路(CNN)结构如下图所示:
对比两者的结构差别,我们可以发现,CNN中新增了Convolution 层 和 Pooling 层。
CNN层的连接顺序为“convolution - relu - (Pooling)”(Pooling 层有时会被忽略)。这可以理解为之前的DNN中的“Affine - ReLU”替换成了“convolution - relu - (Pooling)”连接。
一般在CNN靠近输出的层中使用了之前的“Affine - ReLU”连接。若是分类任务,则输出层使用之前的“Affine- Softmax”连接。
1 二维数据的卷积运算——Conv2D
卷积层进行的处理就是卷积运算。类似于图像处理中的“滤波器运算”。
例:
在上图中,输入数据大小为(4,4),滤波器大小为(3,3),输出大小为(2,2)。
计算过程如下:
在上图所示的计算过程中,卷积运算以一定间隔滑动滤波器的窗口(即灰色部分)并应用。如图所示,将滤波器矩阵与窗口矩阵点乘再求和。然后将结果保存到输出矩阵的对应位置。
**步幅:**卷积运算中,滤波器的滑动距离称为步幅
在CNN中,滤波器就相当于DNN中的权重。那么,CNN中有偏置么?是有的。
带偏置的卷积运算如下图所示:
偏置的大小一般为‘1×1’。
1.1 填充处理
填充即是在卷积层处理输入数据前,向输入数据的周围填入固定的数据(一般为‘0’)。
目的:调整输出的大小。一般而言,一个数据随着卷积次数的增多,其形状会渐渐变小。假设一个数据在经过n次卷积运算后,形状为1,此时其以不可应用卷据运算。
1.2 步幅处理
卷积运算中,滤波器滑动的间隔称为步幅(stride)。
将步幅设为2,如下图所示:
1.3 输出大小与输入,滤波器,填充,步幅大小之间的关系
假设输入大小为(H,W),滤波器大小为(FH,FW),输出大小为(OH,OW),填充为P,步幅为S。
输出大小的计算公式如下:
O
H
=
H
+
2
P
−
F
H
S
+
1
OH = \frac{H+2P-FH}{S} +1
OH=SH+2P−FH+1
O
W
=
W
+
2
P
−
F
W
S
+
1
OW = \frac{W+2P-FW}{S} +1
OW=SW+2P−FW+1
2. 三维数据的卷积运算——Conv3D
在图像处理任务中,输入数据一般为图像。而图像是三维数据,处理高,长方向,还有通道。
以3通道的数据为例,展示了卷积运算的结果。通道方向存在多个特征图,即按通道进行输入数据和滤波器的卷积运算,再将结果相加,得到输出。
得到的输出数据称为输入数据得一个特征图。
计算过程如下
将三维得输入数据和滤波器视为一个长方体。输入数据得形状为(C,H,W),C为通道数,H为高,W为长。滤波器的高为FH,长为FW,通道数和输入数据相同,为C。
上图所示的例子,数据输出为一张特征图。
一般,输出层同时需要多张特征图。其计算示意图如下:
带偏置的三维数据的卷积运算示意图如下:
3.汇聚层/聚合层/池化层——Pooling Layer
该层其实也是一种卷积运算。其是缩小高,长方向上的空间的运算。
其目的在于压缩输入数据,优化模型的学习速度。
3.1最大池化
如下图所示,将2×2的区域集约成一个元素的处理,缩小空间大小。
3.2 平均池化
操作步骤与最大池化相同,只不过在池化时将目标区域取平均值。
3.3 其与卷积层的异同:
- 同:实质上都是卷积运算
- 异:
- (1)没有要学习的参数,只是从目标区域中选取最大值/平均值/
- (2) 通道数不发生改变:经过池化运算,输入数据和输出数据的通道数不会发生改变。
- (3)对微小的位置变化具有鲁棒性。
输入数据发生微小偏差时,池化仍会返回相同的结果。