赞
踩
步幅:卷积核经过输入特征图的采样间隔
填充:在输入特征图的每一边添加一定数目的行列,使得输出的特征图的长、宽 = 输入的特征图的长、宽
两个参数的核心:
设置步幅的目的:希望减小输入参数的数目,减少计算量。
设置填充的目的:希望每个输入方块都能作为卷积窗口的中心。
在边长=4的输入矩阵各边填充1层,全部填充0,采用边长=3的卷积核,全部卷积核的中心构成原输入。
首先从一个问题入手:
问题:一个尺寸 a*a的特征图,经过b*b的卷积层,步幅(stride)=c,填充(padding)=d,
请计算出输出的特征图尺寸?
回答:
答:若d等于0,也就是不填充,输出的特征图的尺寸=(a-b)/c+1
若d不等于0,也就是填充,输出的特征图的尺寸=(a+2d-b)/c+1
举栗子:
栗子1:stride=1,padding=0(遍历采样,无填充:padding=‘valid’)
栗子2:stride=1,padding=1(遍历采样,有填充:padding=‘same’)
栗子3:stride=2,padding=0(降采样,无填充:尺寸缩小二点五分之一)
栗子4:stride=2,padding=1(降采样,有填充;尺寸缩小二分之一)
Stride的作用:是成倍缩小尺寸,而这个参数的值就是缩小的具体倍数,比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3
注意:
上面的说法(步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3)不是很严谨,这不是定理来的,步幅为2可以理解成对输入的特征图做了2倍下采样,我们希望的是减少输入参数,防止参数太多计算量太大,这是设置步幅为2的目的,并不是严格意义上的输出是输入的1/2、1/3,这里要特别弄清楚。
栗子1:
一个特征图尺寸为
4
∗
4
4*4
4∗4的输入,使用
3
∗
3
3*3
3∗3的卷积核,步幅=1,填充=0,输出的尺寸=(4 - 3)/1 + 1 = 2。
栗子2:
一个特征图尺寸为
5
∗
5
5*5
5∗5的输入,使用
3
∗
3
3*3
3∗3的卷积核,步幅=1,填充=1, 输出的尺寸=(5 + 2*1 - 3)/1 + 1 = 5。
栗子3: 一个特征图尺寸为 5 ∗ 5 5*5 5∗5的输入, 使用 3 ∗ 3 3*3 3∗3的卷积核,步幅=2,填充=0,输出的尺寸=(5-3)/2 + 1 = 2。
栗子4:
一个特征图尺寸为
6
∗
6
6*6
6∗6的输入, 使用
3
∗
3
3*3
3∗3的卷积核,步幅=2,填充=1, 输出的尺寸=(5 + 2*1 - 3)/2 + 1 = 3。(降采样:边长减少1/2)
看到stride
步幅 stride 是一个一维的向量,长度为4。 形式是[a,x,y,z],分别代表[batch滑动步长,水平滑动步长,垂直滑动步长,通道滑动步长] 在tensorflow中,stride的一般形式是[1,x,y,1] 第一个1表示:在batch维度上的滑动步长为1,即不跳过任何一个样本 x表示:卷积核的水平滑动步长 y表示:卷积核的垂直滑动步长 最后一个1表示:在通道维度上的滑动步长为1,即不跳过任何一个颜色通道 在代码中多数看到的是 strides=[1,1,1,1] 或者 strides=[1,2,2,1] 这里的 strides=[1,1,1,1] 表示就是栗子1、2图示步幅=1的情况 这里的 strides=[1,2,2,1] 表示就是栗子3、4图示步幅=2的情况
看到padding
写代码时,要注意,padding有两个模式,分别是 'same' 和 'valid' ,
padding='same'表示进行填充,填充的值由算法内部根据卷积核大小计算,目的是让输出尺寸和输入相等;
padding='valid'表示不进行填充,即是 padding=0,只使用有效的窗口位置,这是默认的选项。
填充的值=(b - 1)/2
填充的值,b的值就是卷积核的尺寸,这里就是为什么卷积核尺寸通常选择奇数的原因
举例子:
问题1. 一个尺寸 5*5 的特征图,经过 3*3 的卷积层,步幅(stride)=1,想要输出尺寸和输入尺寸相等,填充(padding)的值应该等于多少?
答:填充的值=(3 - 1)/2 = 1,即每一边填充1层
问题2. 一个尺寸 224*224 的特征图,经过 7*7 的卷积层,步幅(stride)=2,想要输出尺寸和输入尺寸相等,填充(padding)的值应该等于多少?
答:填充的值=(7 - 1)/2 = 3,即每一边填充3层
还要注意:
padding='same'目的是让输出尺寸和输入尺寸相等,但前提是步幅=1,步幅若不是1,那么输出尺寸跟输入尺寸肯定是不一样。
对于 padding 的 same 和 valid 模式两种直白的理解就是要么不填充,要么填充就让输出尺寸和输入尺寸相等
padding 的值不会乱取,就两种情况,要么padding=0 要么padding=(b - 1)/2。
参考文章:
【1】 tensorflow中步长stride的参数具体解析
【2】 CNN基础知识——卷积(Convolution)、填充(Padding)、步长(Stride)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。