Ошибка времени выполнения: несоответствие размера, m1: [4 x 3136], м2: [64 x 5] при c: \ a \ w \ 1 \ s \ tmp_conda_3.7_1 - PullRequest
0 голосов
/ 04 марта 2019

Я использовал Python 3, и когда я вставляю преобразование случайного размера кадрирования 224, это выдает ошибку несоответствия.

здесь мой код

что я сделал не так?

1 Ответ

0 голосов
/ 04 марта 2019

Ваш код вносит изменения в resnet : вы изменили количество каналов, количество узких мест на каждом «уровне» и полностью удалили «уровень».В результате размер карты объектов, который у вас есть в конце layer3, равен , а не 64: у вас больше пространственное измерение, чем вы ожидали от nn.AvgPool2d(8).Полученное вами сообщение об ошибке на самом деле говорит вам, что вывод level3 имеет форму 64 x 56 x 56 и после объединения пула с ядром и шагом 8 вы получите 64 x 7 x 7 = 3136 вектор пространственных объектов, вместо ожидаемого только 64.

Что вы можете сделать?
В отличие от "стандартного" перезапуска, вы удалили шаг с conv1 и неиметь максимальный пул после conv1.Кроме того, вы удалили layer4, у которого также есть шаг.Следовательно, вы можете добавить пул в свою сеть, чтобы уменьшить пространственные измерения layer3.
. В качестве альтернативы вы можете заменить nn.AvgPool(8) на nn.AdaptiveAvgPool2d([1, 1]) средний пул, который выводит только один объект независимо отпространственные размеры входной карты объектов.

...