一、卷积操作
输入图像为正方形
输入图像尺寸为
,卷积核尺寸为
,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为
:
输入图像为矩形
输入图像尺寸为
,卷积核尺寸为
,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为
,计算方式如下:
对于三通道的图像进行卷积,使用的是三维卷积核,比如说下图所示:
图源:TensorFlow中padding卷积的两种方式“SAME”和“VALID”
输出的矩阵会把三个通道分别卷积然后叠加起来形成一个二维矩阵,卷积核的个数决定了输出二维矩阵的个数,所以输出矩阵的通道数是卷积核的个数。如果出现除不尽的情况,卷积计算操作向下取整。
二、池化操作
输入图像尺寸为
(其中D是图像深度),池化核尺寸为
,步长为S,一般不在池化操纵中使用padding操作,经过池化之后输出的图像尺寸为
,计算方式如下:
池化不改变输入图像的通道数。如果出现除不尽的情况,池化计算操作向上取整。
padding模式选择
在tensorflow中,你可以选择使用何种padding策略,有VALID和SAME可供选择。注意,和上面卷积操作有些许不同,这两种操作默认是向上取整的,因为tf的源代码中是这样写的:
If padding == "SAME":
output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])
If padding == "VALID":
output_spatial_shape[i] =
ceil((input_spatial_shape[i] -
(spatial_filter_shape[i]-1) * dilation_rate[i])
/ strides[i])
dilation_rate为一个可选的参数,默认为1,这里我们先不管。那么这两种策略就可以写成如下公式。
VALID策略:
若padding=VALID,那么输出尺寸为
,向上取整。
SAME策略:
若padding=SAME,那么输出尺寸为
,向上取整,使用padding填充,由上面计算可得
。
例子:TensorFlow中padding卷积的两种方式“SAME”和“VALID”
使用SAME:
SAME结果:
5/2=2.5,向上取整是3。
使用VALID:
VALID结果:
(5-3+1)/2=1.5,向上取整2。