正向卷积
h o u t = h i n + 2 p a d d i n g − k e r n e l s t r i d e + 1 h_{out}=\frac{h_{in}+2padding-kernel}{stride}+1 hout=stridehin+2padding−kernel+1
转置卷积
对于反向卷积,因为为了保证操作互逆,即转置卷积后,再正向卷积可以还原尺寸。。这里 指未转置卷积前的特征图尺寸。
s t r i d e = 1 stride=1 stride=1
此外当stride=1时,由于还有以下式子成立,
h
i
n
+
2
p
a
d
d
i
n
g
n
e
w
=
h
o
u
t
+
2
p
a
d
d
i
n
g
h_{in}+2padding_{new}=h_{out}+2padding
hin+2paddingnew=hout+2padding
代入即得
p
a
d
d
i
n
g
n
e
w
=
k
e
r
n
e
l
−
p
a
d
d
i
n
g
−
1
padding_{new}=kernel-padding-1
paddingnew=kernel−padding−1
注意,在转置卷积中实际执行的
s
t
r
i
d
e
′
stride'
stride′总是为1,
s
t
r
i
d
e
′
≜
1
stride'\triangleq 1
stride′≜1
输出尺寸计算
其转置卷积后的尺寸可按如下使用conv2DTranspose
的参数计算得到:
h
o
u
t
=
(
h
i
n
p
u
t
−
1
)
∗
s
t
r
i
d
e
−
2
p
a
d
d
i
n
g
+
k
e
r
n
e
l
_
s
i
z
e
h_{out}=(h_{input}-1) * stride - 2padding + kernel\_size
hout=(hinput−1)∗stride−2padding+kernel_size
若试图上采样为原图像2倍尺寸
h
o
u
t
=
2
h
i
n
p
u
t
h_{out}=2h_{input}
hout=2hinput,代入
2
h
i
n
p
u
t
=
(
h
i
n
p
u
t
−
1
)
∗
s
t
r
i
d
e
−
2
p
a
d
d
i
n
g
+
k
e
r
n
e
l
_
s
i
z
e
2h_{input}=(h_{input}-1) * stride - 2padding + kernel\_size
2hinput=(hinput−1)∗stride−2padding+kernel_size
显然,希望无论对于任何图像输入尺寸,总能放大为原来2倍,那么
s
t
r
i
d
e
=
2
stride=2
stride=2以消去
h
i
n
p
u
t
h_{input}
hinput
于是只剩下如下的超参数:
2
p
a
d
d
i
n
g
+
2
=
k
e
r
n
e
l
_
s
i
z
e
2padding+2= kernel\_size
2padding+2=kernel_size
《动手学深度学习》里,
k
e
r
n
e
l
s
i
z
e
=
4
kernel_size=4
kernelsize=4,那么
p
a
d
d
i
n
g
=
1
padding=1
padding=1