终于忙完所有的事,可以开始好好学习啦!这一节介绍一下Padding和Stride(步幅)的概念。
七、Padding
Padding和步幅是卷积神经网络底层框架的重要组成部分。
Padding可以理解为补充填白,在这里我们以灰度图(2维)为例解释一下。
1.为什么需要Padding以及什么是Padding?
在前面我们讲过如果用一个6*6的图像与一个3*3的卷积核进行卷积,最终会得到一个4*4的结果:
也就是说一个n*n的图像与一个f*f的卷积核卷积之后的结果为(n-f+1)*(n-f+1)。
但是这会出现两个问题:
(1)输出逐渐缩小:每次进行卷积之后图片都会变小,例如上面的实例,6*6的图片最后变成了4*4。如果经过多层卷积,最终这个图片会变得非常小,可能最终成了1*1。
(2)边界信息丢失:角落和边缘的像素实际上只被用到了一次,中间的在卷积过程中用到了多次,这就会导致我们丢失很多的信息。
为了解决上面的问题,我们进入Padding。
2.Padding
Padding就是填充空白保证图片在卷积的过程中大小不变,信息不丢失。
同样以上面的为例,我们在输入的6*6的基础上补充一个像素变成8*8的图片,整个卷积过程就变成了如下的样子。
通过填充,我们保持了图片原来的大小,并且尽可能的降低边界元素丢失的情况。我们填充的通常为0,如果我们用p来表示填充,这个时候p=1,输出变成了(n+2p-f+1)*(n+2p-f+1)。
3.常见Padding形式
(1)valid卷积:valid的意思是没有填充,即p=0。在这种情况下,用一个f*f的卷积核去卷积一个n*n的图片,会得到一个(n-f+1)*(n-f+1)维度的输出。
(2)same卷积:通过填充使得输出大小等于输入大小。通过列一个恒等式,n=n+2p-f+1(输入大小=输出大小)。我们解得p=(f-1)/2。这就告诉我们如何选择Padding的大小,是根据卷积核的大小计算得出的。如果卷积核大小为5*5,Padding大小为2。
通常,f为奇数。
以上就是Padding介绍,下一个是Stride的介绍。
八、Stride(步幅)
Stride是卷积神经网络组成的另一部分。
假设我们对一个7*7的图片进行卷积,在前面的例子中我们的步长为1,这次我们将步长设定为2,看一下卷积的过程。
步长为2可以简单的理解为一次走两个像素点,具体如下:
Step1:
Step2:
Step3:
Step4:
Step5:…
以上就是Stride(步幅)的介绍。
这两个概念还是很好理解的,最后小结一下输入和输出维度之间的关系:
我们以p代表Padding,s代表Stride,用一个f*f的卷积核对一个n*n的图像进行卷积得到的输出为:
在这里我们进行了向下取整操作,及如果有分数,则取最接近x的小于x的整数。这样就保证了卷积操作没有对超出原图像的部分进行卷积。
通过前面的学习,对卷积的相关知识有了基本的了解之后我们就可以尝试搭建单层卷积网络!