В Alex Krizhevsky et al. При классификации Imagenet с глубокими сверточными нейронными сетями они перечисляют количество нейронов в каждом слое (см. Диаграмму ниже).
Сетевой вход имеет размер 150 528, а число нейронов в остальных слоях сети составляет 253 440–186 624–64 896–64 896–43 264– 4096–4096–1000.

3D вид
Количество нейронов для всех слоев после первого ясно. Один простой способ вычислить нейроны состоит в том, чтобы просто умножить три измерения этого слоя (planes X width X height ):
- Слой 2:
27x27x128 * 2 = 186,624 - Слой 3:
13x13x192 * 2 = 64,896 - и т.п.
Тем не менее, глядя на первый слой:
- Слой 1:
55x55x48 * 2 = 290400
Обратите внимание, что это не 253,440 как указано в документе!
Рассчитать выходной размер
Другой способ вычислить выходной тензор свертки:
Если входное изображение является 3D-тензором
nInputPlane x height x width, размер выходного изображения будетnOutputPlane x owidth x oheightгде
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1,
(из документации Torch SpatialConvolution )
Исходное изображение:
nInputPlane = 3height = 224width = 224
И слой свертки это:
nOutputPlane = 96kW = 11kH = 11dW = 4dW = 4
(например, размер ядра 11, шаг 4)
Подставив эти цифры, мы получим:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Таким образом, нам не хватает 55x55размеров, которые нам нужны, чтобы соответствовать бумаге. Они могут быть дополнением (но cuda-convnet2модель явно устанавливает отступ равным 0)
Если мы возьмем 54размеры-размеры, мы получим 96x54x54 = 279,936нейроны - все еще слишком много.
Итак, мой вопрос заключается в следующем:
Как они получают 253440 нейронов для первого сверточного слоя? Чего мне не хватает?