kernel_size=1时,Conv2d与Conv2dTranspose的差异探究
Conv2d与Conv2dTranspose在无Stride/Padding时的差异
基础概念回顾
- 下采样:缩小输入的空间维度(高、宽),比如输入为
(Batch Size=5, Channel=3, Height=8, Width=8)时,使用maxpooling(stride=2, kernel_size=2)后,输出变为(5,3,4,4),空间维度减半。 - 上采样:与下采样方向相反,用于增大输入的空间维度。
核心问题解答:无Stride/Padding时的差异
当不设置stride(默认值为1)和padding(默认值为0)时,两者的差异主要体现在输出空间维度和底层运算逻辑上:
1. 输出空间维度差异
根据PyTorch官方的维度计算公式:
对于
Conv2d,输出空间维度公式为:H_out = floor((H_in - kernel_size + 2*padding)/stride) + 1代入
stride=1、padding=0,可得:H_out = H_in - kernel_size + 1——空间维度会缩小(除非kernel_size=1)。对于
Conv2dTranspose,输出空间维度公式为:H_out = (H_in - 1)*stride - 2*padding + kernel_size + output_padding代入默认参数(
stride=1、padding=0、output_padding=0),可得:H_out = H_in + kernel_size - 1——空间维度会增大(除非kernel_size=1)。
2. 即使kernel_size=1,运算逻辑仍有差异
当kernel_size=1时,两者的输出空间维度一致(都等于输入空间维度),但底层运算逻辑完全不同:
Conv2d执行互相关运算:输入特征图与卷积核直接做对应位置的加权求和。Conv2dTranspose执行转置卷积运算:本质是将卷积操作的矩阵形式转置后运算,权重的作用方式与Conv2d相反,最终输出的数值结果也会不同。
示例代码
import torch # 普通卷积 classifier1 = torch.nn.Conv2d(in_channels=10, out_channels=5, kernel_size=1) # 转置卷积 classifier2 = torch.nn.Conv2dTranspose(in_channels=10, out_channels=5, kernel_size=1)
内容的提问来源于stack exchange,提问作者user19862929
相关产品推荐
相关产品推荐

