С PyTorch, как уменьшается размер моего Conv1d при заполнении? - PullRequest
1 голос
/ 23 апреля 2020

My 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])

Где этот последний элемент go?

1 Ответ

3 голосов
/ 23 апреля 2020

Ответ можно найти в документации Pytorch онлайн ( здесь ). Для каждой операции выходная форма выражается по отношению к входным параметрам:

enter image description here

Для каждого конвона:

- 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)

Do не забывайте, что Lin - это предыдущий размер.

...