首页 > 编程语言 >卷积神经网络编程基础|填充和步幅

卷积神经网络编程基础|填充和步幅

时间:2023-01-08 11:01:11浏览次数:60  
标签:输出 填充 步幅 卷积 神经网络 ph 输入

问题

上一节课(​​https://www.zhihu.com/education/video-course/1647604835598092705?section_id=1647604843789894187​​)中介绍卷积层的互相关运算,并且使用了高宽为3的输入与高宽为2的卷积核得到了高宽为2的输出。

卷积神经网络编程基础|填充和步幅_卷积

归纳一下有结论:

假设输入形状为Nh X Nw,卷积核窗口形状为Kh X Kw,则输出形状为(Nh-Kh+1)X(Nw-Kw+1)。

由上图可知,卷积层的输出形状由输入形状和卷积核窗口形状决定。且经过卷积后,卷积层的输出形状是减小的。

那么,如果我们想要卷积又不想减小输出应该怎么办呢?

此时就需要卷积层的超参数——填充


填充(padding)

【填充】是指在输入高和宽的两侧填充元素(通常是填充0元素),即在输入的周围添加额外的行或者列。

下图中,我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,经过互相关运算后输出的高和宽由2增加到了4.

卷积神经网络编程基础|填充和步幅_卷积_02

阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:

0X0 + 0X1 + 0X2 + 0X3 = 0

假设在输入数据的高的两侧一共填充ph行,在宽的两侧一共填充pw行,则输出形状为

(nh-kh+ph+1)X(nw-kw+pw+1)。当ph=kh-1且pw=kw-1时,输入和输出的高宽相等。

填充规则

  • 若卷积核 kh 是奇数,我们会在高的两侧分别填充ph/2 。
  • 若卷积核 kh 是偶数,会在输入的顶端一侧填充 ph /2 (上入整数),而在底端一侧填充 ph /2(下舍整数)。
  • 在宽的两侧填充同理。

卷积神经网络通常使用奇数高宽的卷积核(例如1、3、5和7),这使得在输入两端的填充数相同。

【填充还有一个更加重要的意义】使输入数据的边缘和内部获得相同的卷积计算次数,即输入的边界数据和中间数据同等重要。这一特点在图像卷积应用中至关重要,因为这涉及到图像的边缘特征能否有效提取。

为什么经常使用0填充呢?

主要是因为在卷积的互相关运算过程中,0乘运算不会对边缘数据的提取产生额外影响。

代码演示填充后的卷积:

卷积神经网络编程基础|填充和步幅_卷积核_03

填充可以增加输出的高和宽,当输入的高宽两侧的填充数分别为Ph和Pw时,称填充为(Ph, Pw),当两者相等时,称填充为p;

通过上面介绍,我们知道填充可以增加输出高宽

假设给定输入大小是224X224,使用5X5的卷积核,则需要经过55((224-5+1)/4=55)个卷积层才可以将输出降低到4X4,即需要大量计算才能得到较小的输出。

那么,如何快速减小输出高宽且减小计算量呢?


步幅(stride)

在二维互相关运算中,卷积窗口从输入数组的左上方开始,按照从左往右、从上往下的顺序,依次在输入数组上滑动运算,我们称每次窗口滑动的行数和列数为【步幅】。

此前我们看到的例子里都是步幅为1的卷积滑动,即逐个像素的滑动。

看下面的情况:

卷积神经网络编程基础|填充和步幅_数据_04

上图演示了大步幅的二维互相关运算,在高度方向上步幅为3,在宽度方向上步幅为2。

由于输入尺寸是5X5,卷积核尺寸是2X2,所以在宽度方向上只能有两个完整的运算,最后一列由于输入元素无法填满卷积窗口,故无结果输出。高度方向上类似。

当高度方向上步幅为sh,宽度方向上步幅为sw时,输出形状为

[(nh - kh + ph + sh)/sh] X [(nw - kw + pw + sw)/sw]

当填充尺寸ph = kh - 1且pw = kw - 1时,则输出简化为

[(nh + sh - 1)/sh] X [(nw + sw - 1)/sw]

当输入数组的高宽可以分别被对应的步幅整除时,则输出进一步简化为

(nh / sh) X (nw / sw)

演示卷积步幅用法的代码:

卷积神经网络编程基础|填充和步幅_卷积核_05

于是有结论:步幅可以减小输出的高和宽,当输入的高宽方向上的步幅分别为sh和sw时,称步幅为(sh, sw),当两者相等时,称步幅为s。


总结

  • 填充和步幅都是卷积层的超参数;
  • 填充是在输入周围添加额外的行/列,来控制输出的高和宽。这常用于使输出与输入具有相同的高和宽,进而可以继续叠加卷积层来加深网络层数。
  • 步幅是每次滑动核窗口的行/列的步长,可以成倍的减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的 1/n(n 为大于 1 的整数)。步幅可以理解为采样间隔,增大步幅,能够减少输入参数的数目,从而减少计算量。
  • 卷积神经网络通常使用奇数高宽的卷积核,如1、3、5和7,默认填充为0,步幅为1。
  • 经过卷积层后的输出尺寸= (输入高宽- 核高宽+ 填充高宽+ 步幅高宽)/步幅高宽。

参考文献


标签:输出,填充,步幅,卷积,神经网络,ph,输入
From: https://blog.51cto.com/zhuxianzhong/5996598

相关文章