Каково алгебраическое выражение для формы вывода ConvTranspose2d в PyTorch? - PullRequest
0 голосов
/ 09 ноября 2019

При использовании PyTorch ConvTranspose2d следующим образом:

w = 5 # input width
h = 5 # output height
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=k, stride=s, padding=p)

Какова формула для размеров выходного сигнала в каждом канале? Я попробовал несколько примеров и не могу вывести шаблон. По какой-то причине добавление отступов сокращает размер вывода (пример начинается с 5 x 5, как указано выше):

# yields an 11 x 11 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=0) 

# yields a 7 x 7 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=2)

При использовании большего ядра или увеличении обоих значений (ожидается), но не с ожидаемой скоростью:

# yields an 11 x 11 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=0) 

# yields a 13 x 13 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=5, stride=2, padding=0)

# yields a 15 x 15 image
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=3, padding=0)

Я уверен, что есть довольно простое математическое уравнение, включающее w, h, k, s, p, но я не могу найти его в документации и не смог получить его сам. Обычно я не стал бы просить математическое уравнение, но оно полностью влияет на способность CNN компилировать и генерировать правильный размер. Заранее спасибо!

1 Ответ

0 голосов
/ 09 ноября 2019

Формула для расчета ConvTranspose2d выходных размеров упоминается на странице документации :

H_out = (H_in −1) * шага [0] - 2× заполнение [0] + расширение [0] × (размер ядра [0] -1) + выход_адента [0] + 1

W_out = (Win -1) × шаг [1] - 2 × заполнение[1] + расширение [1] × (kernel_size [1] -1) + output_padding [1] + 1

По умолчанию, stepde = 1, padding = 0 и output_padding = 0.

Например, для

nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=0) 

H_out будет

H_out = (5-1)*2 - 2*0 + 1*(3-1) + 0 + 1 = 11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...