1. 2D 卷积
1
| class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
|
- 输入尺度:(N,Cin,Hin,Win)
- 输出尺度: (N,Cout,Hout,Wout)
Hout=floor((Hin+2×padding[0]−dilation[0]×(kernerl_size[0]−1)−1)/stride[0]+1)
Wout=floor((Win+2×padding[1]−dilation[1]×(kernerl_size[1]−1)−1)/stride[1]+1)
2. 2D 反卷积
1
| class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True)
|
- 输入尺度:(N,Cin,Hin,Win)
- 输出尺度: (N,Cout,Hout,Wout)
Hout=(Hin−1)×stride[0]−2×padding[0]+kernel_size[0]+output_padding[0]
Wout=(Win−1)×stride[1]−2×padding[1]+kernel_size[1]+output_padding[1]
【注】Conv2d 函数中的 stride 为卷积核的移动步长,padding 为输入张量的填充长度;而 ConvTranspose2d 函数中的 stride 为输入张量元素的间隔,padding 为输入张量的填充长度减小值。
在 ConvTranspose2d 中,stride 后的张量步长为:
o=(i−1)×stride+1
此外,ConvTranspose2d 默认对输入张量做全填充,即 kernel_size/2 函数中的 padding 则是用来指定填充步长的减小值,即最终填充步长为
kernel_size/2−padding
而 output_padding 是在转置卷积后,给输出张量增加的 0 填充步长。