目录标题
- 一、卷积运算
- 二、填充
- 三、步幅
一、卷积运算
卷积层对数据进行卷积运算,卷积运算相当于图像处理中得滤波器运算
对于输入数据,卷积运算以一定间隔滑动卷积核的窗口并应用。将各个位置上卷积核的元素和输入的对应元素相乘,然后再求和(也称为乘积累加运算、矩阵的内积)。
CNN中,卷积核得参数对应之前得权重。并且CNN中也存在偏置
二、填充
在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如0),这称为填充(padding)。例如,对形状为 4×4 的数据进行幅度为 1 的填充,即用幅度为 1、值为 0 的数据填充周围:
可以看到,4×4 的数据进行幅度为 1 的填充后形状变为 6×6,再经过卷积后数据的形状为 4×4。使用填充主要目的是为了调整输出数据的形状大小,避免多次卷积后数据形状大小过小导致无法继续进行卷积运算。运用填充可以令数据形状在经过卷积运算后保持不变。
三、步幅
应用卷积核的位置间隔称之为步幅(stride)。没有强调方向,所有横向和纵向是一样的,如果步幅是2,那横纵移动都是2
之前的例子中步幅都为 1,下面我们进行步幅为 3 的卷积运算:
可移动格子(长度): w+2p-fw 但是有步幅s,所以可移动次数就是 w + 2p - fw / s 本身未移动之前就是一次计算
可以看到填充和步幅都会影响输出数据的形状大小。增大填充,输出数据形状大小会变大;增大步幅,输出数据形状大小会变小。让我们分析一下给定填充和步幅如何计算输出数据的形状大小。
假设输入数据形状为( H , W ) (H, W)(H,W),卷积核大小为( F H , F W ) (FH, FW)(FH,FW),填充为P PP,步幅为S SS,输出数据形状为( O H , O W ) (OH, OW)(OH,OW),可得:
O H = H + 2 P − F H S + 1 OH = \frac{H + 2P - FH}{S} + 1OH=SH+2P−FH+1
O W = W + 2 P − F W S + 1 OW = \frac{W + 2P - FW}{S} + 1OW=SW+2P−FW+1
例如,对于形状为( 4 , 4 ) (4,4)(4,4)的输入数据应用幅度为1 11的填充,并应用步幅为3 33,卷积核大小为( 3 , 3 ) (3,3)(3,3)的卷积运算:
O H = O W = 4 + 2 − 3 3 + 1 = 2 OH = OW = \frac{4 + 2 - 3}{3} + 1 = 2OH=OW=34+2−3+1=2
得到形状为( 2 , 2 ) (2,2)(2,2)的输出数据。
当输出大小无法除尽时,PyTorch 卷积层会自动向下取整,输出整数尺寸,舍弃无法覆盖完整卷积核的输入部分。