PyTorch 1.8.1中空洞卷积Same Padding实现异常问题咨询
问题分析与解决方案
你的计算逻辑是正确的:当stride=1时,要实现空洞卷积的Same Padding,padding确实需要设置为dilation*(kernel_size-1)//2(对应你的参数就是(35,35)),代入PyTorch 1.8.1的输出尺寸公式也能得到输入输出尺寸一致的结果。
但你实际得到的输出尺寸(681,569),正好对应dilation=1时的计算结果:
Hout = ⌊(625 + 2×35 −1×(15−1) −1)/1 +1⌋ = 625+70-14-1+1=681 Wout = ⌊(513 + 2×35 −1×(15−1) −1)/1 +1⌋ =513+70-14-1+1=569
这说明你在定义torch.nn.Conv2d层时,很可能没有正确传入dilation=5参数,而是使用了默认值dilation=1。
正确的卷积层定义示例
确保dilation参数明确设置为5:
import torch conv_layer = torch.nn.Conv2d( in_channels=1, out_channels=64, kernel_size=(15, 15), stride=(1, 1), dilation=5, # 关键:必须显式设置为5,不要漏写 padding=(35, 35) ) # 验证输入输出尺寸 input_tensor = torch.randn(1, 1, 625, 513) output_tensor = conv_layer(input_tensor) print(output_tensor.shape) # 应为 torch.Size([1, 64, 625, 513])
其他排查方向
如果确认dilation参数设置正确,检查以下几点:
- 代码中是否有后续逻辑修改了卷积层的
padding或dilation属性 - 计算
padding时是否用错了kernel_size的值(比如误写为(16,16)) - 是否在创建张量时混淆了高度和宽度维度(不过你的输入输出维度变化比例一致,这种可能性较低)
内容的提问来源于stack exchange,提问作者Soheila Hesaraki
相关产品推荐
相关产品推荐

