В учебнике PyTorch построенная сеть имеет вид
Net(
(conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
(conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
(fc1): Linear(in_features=400, out_features=120, bias=True)
(fc2): Linear(in_features=120, out_features=84, bias=True)
(fc3): Linear(in_features=84, out_features=10, bias=True)
)
и используется для обработки изображений с размерами 1x32x32
.Они упоминают, что сеть нельзя использовать с изображениями другого размера.
Два сверточных слоя, кажется, допускают произвольное количество функций, поэтому линейные слои, похоже, связаны с получением 32x32
в 10
конечные элементы.
Я не очень понимаю, как там выбираются числа 120
и 84
и почему результат совпадает с входными измерениями.
Икогда я пытаюсь построить аналогичную сеть, у меня фактически возникает проблема с размером данных.
Когда я, например, использую более простую сеть:
Net(
(conv1): Conv2d(3, 8, kernel_size=(5, 5), stride=(1, 1))
(conv2): Conv2d(8, 16, kernel_size=(5, 5), stride=(1, 1))
(fc1): Linear(in_features=400, out_features=3, bias=True)
)
для вводаразмер 3x1200x800
, я получаю сообщение об ошибке:
RuntimeError: size mismatch, m1: [1 x 936144], m2: [400 x 3] at /pytorch/aten/src/TH/generic/THTensorMath.cpp:940
Откуда берется число 936144
и как мне нужно спроектировать сеть, чтобы размеры соответствовали?