卷积神经网络中的padding理解

首先看一下以下代码吧!

from keras.layers import Conv2D,Dense,Flatten
from keras.models import Sequential
model = Sequential()
model.add(Conv2D(filters  = 32,kernel_size = [3,3],strides = [1,1],padding = 'same',input_shape = [6,6,3]))
model.add(Flatten())
model.add(Dense(units = 10,activation = 'softmax'))
model.compile()
model.fit()

问题的来源是这样的,卷积层的基本实现原理不难,但是当看到代码中的参数padding的时候感觉不是很明白,这里简单写一下自己的理解。

卷积神经网络中的padding理解_第1张图片
上图是简单的卷积处理方式,假设原始图片的尺寸是6x6,卷积核的大小是3x3,滑动步长为1,那么按照卷积核的滑动方式,我们可以得到feature map的尺寸为 (63+1)×(63+1) ( 6 − 3 + 1 ) × ( 6 − 3 + 1 ) ,但是这样的处理方式会有两个缺点:

1.卷积后的矩阵越变越小(如果卷积层100层,每一层都缩小最终得到的将是很小的图片)
2.输入矩阵(左)边缘像素(绿阴影)只被计算过一次,而中间像素(红阴影)被卷积计算多次,意味着丢失图像角落信息。

为了解决这两个问题,就对输入图像进行padding,即填充像素

卷积神经网络中的padding理解_第2张图片
可以看到上图在原始图像的边缘用了像素填充,像素填充后的尺寸变为 8×8 8 × 8 ,卷积核的大小为 3×3 3 × 3 ,步长为1,经过卷积操作之后得到的feature map的尺寸是 (83+1)×(83+1)=6×6 ( 8 − 3 + 1 ) × ( 8 − 3 + 1 ) = 6 × 6 ,feature map的尺寸和原始输入图像的尺寸是一样的。这样就解决了feature map尺寸越来越小的问题。同时从图中可以看出,卷积核对边缘信息的处理不止处理了一次,对边缘信息的提取更加充分了。

你可能感兴趣的:(python,编程,深度学习,图像处理,机器学习,keras)