当前位置:   article > 正文

CNN中stride(步幅)和padding(填充)的详细理解_padding=2

padding=2

步幅:卷积核经过输入特征图的采样间隔

填充:在输入特征图的每一边添加一定数目的行列,使得输出的特征图的长、宽 = 输入的特征图的长、宽

两个参数的核心:

设置步幅的目的:希望减小输入参数的数目,减少计算量。

设置填充的目的:希望每个输入方块都能作为卷积窗口的中心。

在边长=4的输入矩阵各边填充1层,全部填充0,采用边长=3的卷积核,全部卷积核的中心构成原输入。

在这里插入图片描述

首先从一个问题入手:

问题:一个尺寸 a*a的特征图,经过b*b的卷积层,步幅(stride)=c,填充(padding)=d,
      请计算出输出的特征图尺寸?
  • 1
  • 2

回答:

答:若d等于0,也就是不填充,输出的特征图的尺寸=(a-b)/c+1
    若d不等于0,也就是填充,输出的特征图的尺寸=(a+2d-b)/c+1
  • 1
  • 2

举栗子:
栗子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 44的输入,使用 3 ∗ 3 3*3 33的卷积核,步幅=1,填充=0,输出的尺寸=(4 - 3)/1 + 1 = 2。

在这里插入图片描述

栗子2:
一个特征图尺寸为 5 ∗ 5 5*5 55的输入,使用 3 ∗ 3 3*3 33的卷积核,步幅=1,填充=1, 输出的尺寸=(5 + 2*1 - 3)/1 + 1 = 5。

栗子3: 一个特征图尺寸为 5 ∗ 5 5*5 55的输入, 使用 3 ∗ 3 3*3 33的卷积核,步幅=2,填充=0,输出的尺寸=(5-3)/2 + 1 = 2。

栗子4:
一个特征图尺寸为 6 ∗ 6 6*6 66的输入, 使用 3 ∗ 3 3*3 33的卷积核,步幅=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的情况
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

看到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层
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

还要注意:

padding='same'目的是让输出尺寸和输入尺寸相等,但前提是步幅=1,步幅若不是1,那么输出尺寸跟输入尺寸肯定是不一样。

对于 padding 的 same 和 valid 模式两种直白的理解就是要么不填充,要么填充就让输出尺寸和输入尺寸相等
padding 的值不会乱取,就两种情况,要么padding=0 要么padding=(b - 1)/2。
  • 1
  • 2
  • 3
  • 4

参考文章:

【1】 tensorflow中步长stride的参数具体解析

【2】 CNN基础知识——卷积(Convolution)、填充(Padding)、步长(Stride)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/787171
推荐阅读
相关标签
  

闽ICP备14008679号