Ваш код вносит изменения в 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])
средний пул, который выводит только один объект независимо отпространственные размеры входной карты объектов.