前驱知识
符号规定:
卷积过程
- input_size = i
- kernel_size = k
- stride = s
- padding = p
- output_size = o
对应的反卷积过程:
- input_size = i’
- kernel_size = k’
- stride = s’
- padding = p’
- output_size = o’
- a = (i+2p-k)%s,即无法完整卷积的余数
且有:k’=k, s’=1, i’=o, o’=i
nn.ConvTranspose2d()关键参数
- in_channels(int) – 输入的通道数
- out_channels(int) – 卷积产生的通道数
- kerner_size(int or tuple) - 与此次反卷积对应的卷积的卷积核大小,即 k
- stride(int or tuple,optional) - 与此次反卷积对应的卷积的卷积步长,即 s
- padding(int or tuple, optional) - 与此次反卷积对应的卷积的单侧padding大小,即 p
- output_padding(int or tuple, optional) - 输出边补充0的层数,即 a
例如,一张 (1, 3, 14, 14)的图像,使用ConvTranspose2d(3, 1, kernel_size=3, stride=2, padding=1, output_padding=1)进行反卷积:
i’=14,
k=3,
s=2,
p=1,
a=1.
根据反卷积计算规则:
k’=k=3,
s’=1,
p’=k-1-p=1,
因为s>1,对i’内部填充0,i’’=14+(s-1)(14-1)=27
所以,反卷积之后的输出尺寸为:
o’ = (i’’+2p’-k’+a)/s’ + 1 = (27+2*1-3+1)/1 + 1 = 28
输出尺寸翻倍。