赞
踩
输入图像尺寸为
W
∗
W
W*W
W∗W,卷积核尺寸为
F
∗
F
F*F
F∗F,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为
N
∗
N
∗
C
N*N*C
N∗N∗C:
N
=
W
−
F
+
2
∗
P
S
+
1
N=\frac{W-F+2*P}{S} +1
N=SW−F+2∗P+1
输入图像尺寸为
W
∗
H
W*H
W∗H,卷积核尺寸为
F
∗
F
F*F
F∗F,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为
W
′
∗
H
′
∗
C
W'*H'*C
W′∗H′∗C,计算方式如下:
W
′
=
W
−
F
+
2
∗
P
S
+
1
W'=\frac{W-F+2*P}{S}+1
W′=SW−F+2∗P+1
H
′
=
H
−
F
+
2
∗
P
S
+
1
H'=\frac{H-F+2*P}{S}+1
H′=SH−F+2∗P+1
对于三通道的图像进行卷积,使用的是三维卷积核,比如说下图所示:
图源:TensorFlow中padding卷积的两种方式“SAME”和“VALID”
输出的矩阵会把三个通道分别卷积然后叠加起来形成一个二维矩阵,卷积核的个数决定了输出二维矩阵的个数,所以输出矩阵的通道数是卷积核的个数。如果出现除不尽的情况,卷积计算操作向下取整。
输入图像尺寸为
W
∗
H
∗
D
W*H*D
W∗H∗D(其中D是图像深度),池化核尺寸为
F
∗
F
F*F
F∗F,步长为S,一般不在池化操纵中使用padding操作,经过池化之后输出的图像尺寸为
W
′
∗
H
′
∗
D
W'*H'*D
W′∗H′∗D,计算方式如下:
W
′
=
W
−
F
S
+
1
W'=\frac{W-F}{S}+1
W′=SW−F+1
H
′
=
H
−
F
S
+
1
H'=\frac{H-F}{S}+1
H′=SH−F+1
池化不改变输入图像的通道数。如果出现除不尽的情况,池化计算操作向上取整。
在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,那么输出尺寸为
N
=
W
−
F
+
1
S
N=\frac{W-F+1}{S}
N=SW−F+1,向上取整。
SAME策略:
若padding=SAME,那么输出尺寸为
N
=
W
S
N=\frac{W}{S}
N=SW,向上取整,使用padding填充,由上面计算可得
p
a
d
d
i
n
g
=
F
−
1
2
padding=\frac{F-1}{2}
padding=2F−1。
例子:TensorFlow中padding卷积的两种方式“SAME”和“VALID”
使用SAME:
SAME结果:
5/2=2.5,向上取整是3。
使用VALID:
VALID结果:
(5-3+1)/2=1.5,向上取整2。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。