前言
在进行卷积神经网络中,经常用到padding,padding在卷积神经网络中起到什么样的作用呢,又是如何发挥作用的呢?本文就此谈下自己看法。
代码中的显示
model.add(Conv2D(filters = 32,kernel_size = [3,3],strides = [1,1],padding = 'same',input_shape = [6,6,3]))
通过上面的代码可以看到padding作为参数被使用。那么下面就简单说下关于padding的作用及其如何发挥作用的。
卷积层与卷积核
假设我们已经知道了卷积的工作原理,那么卷积核在对应的卷积层上通过滑动的方式遍历整个卷积层得到了特征参数。
参考图形如下:
上图是简单的卷积处理方式,我们假设原始图片的尺寸是6x6,卷积核的大小是3x3,滑动步长为1。
那么按照卷积核的滑动方式,我们得到的feature map的尺寸为 (6−3+1)×(6−3+1)=16,我们可以看到相比原来的6*6=36的图像小了很多。
因此,这样处理方式就会有如下缺点:
1、卷积后的矩阵越变越小
2、输入矩阵的边缘部分发生卷积的次数相比其它部分要少,这就意味着边缘信息的丢失。
padding解决
为了解决上面两个问题,可以对输入图像进行padding处理,即填充像素。
如上,先将66的图像进行填充,变成一个88的图像,再进行卷积就可以了。
可以看到上图在原始图像的边缘用了像素填充,像素填充后的尺寸变为8×8,卷积核的大小为3×3,步长为1,经过卷积操作之后得到的feature map的尺寸是(8−3+1)×(8−3+1)=6×6,feature map的尺寸和原始输入图像的尺寸是一样的。
这样就解决了feature map尺寸越来越小的问题。同时从图中可以看出,卷积核对边缘信息的处理不止处理了一次,对边缘信息的提取更加充分了。