使用 PyTorch,当我有填充时我的 Conv1d 维度如何减少?
With PyTorch, how is my Conv1d dimension reducing when I have padding?
我的conv module
是:
return torch.nn.Sequential(
torch.nn.Conv1d(
in_channels=in_channels,
out_channels=in_channels,
kernel_size=2,
stride=1,
dilation=1,
padding=1
),
torch.nn.ReLU(),
torch.nn.Conv1d(
in_channels=in_channels,
out_channels=in_channels,
kernel_size=2,
stride=1,
dilation=2,
padding=1
),
torch.nn.ReLU(),
torch.nn.Conv1d(
in_channels=in_channels,
out_channels=in_channels,
kernel_size=2,
stride=1,
dilation=4,
padding=1
),
torch.nn.ReLU()
)
在 forward
中,我有:
down_out = self.downscale_time_conv(inputs)
inputs
的 .size
为 torch.Size([8, 161, 24])
。我希望 down_out
具有相同的大小,但它具有:torch.Size([8, 161, 23])
最后一个元素去哪儿了?
答案可以在 Pytorch 在线文档 (here) 上找到。对于每个操作,输出形状都是相对于输入参数表示的:
对于每个 conv1D:
- L1 = 25 → int((24 + 2*1 - 1*(2 - 1) - 1) / 1 + 1)
- L2 = 25 → int((25 + 2*1 - 2*(2 - 1) - 1) / 1 + 1)
- L3 = 23 → int((25 + 2*1 - 4*(2 - 1) - 1) / 1 + 1)
不要忘记Lin
是以前的尺寸。
我的conv module
是:
return torch.nn.Sequential(
torch.nn.Conv1d(
in_channels=in_channels,
out_channels=in_channels,
kernel_size=2,
stride=1,
dilation=1,
padding=1
),
torch.nn.ReLU(),
torch.nn.Conv1d(
in_channels=in_channels,
out_channels=in_channels,
kernel_size=2,
stride=1,
dilation=2,
padding=1
),
torch.nn.ReLU(),
torch.nn.Conv1d(
in_channels=in_channels,
out_channels=in_channels,
kernel_size=2,
stride=1,
dilation=4,
padding=1
),
torch.nn.ReLU()
)
在 forward
中,我有:
down_out = self.downscale_time_conv(inputs)
inputs
的 .size
为 torch.Size([8, 161, 24])
。我希望 down_out
具有相同的大小,但它具有:torch.Size([8, 161, 23])
最后一个元素去哪儿了?
答案可以在 Pytorch 在线文档 (here) 上找到。对于每个操作,输出形状都是相对于输入参数表示的:
对于每个 conv1D:
- L1 = 25 → int((24 + 2*1 - 1*(2 - 1) - 1) / 1 + 1)
- L2 = 25 → int((25 + 2*1 - 2*(2 - 1) - 1) / 1 + 1)
- L3 = 23 → int((25 + 2*1 - 4*(2 - 1) - 1) / 1 + 1)
不要忘记Lin
是以前的尺寸。