В 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 = 3
height = 224
width = 224
И слой свертки это:
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(например, размер ядра 11
, шаг 4
)
Подставив эти цифры, мы получим:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Таким образом, нам не хватает 55x55
размеров, которые нам нужны, чтобы соответствовать бумаге. Они могут быть дополнением (но cuda-convnet2
модель явно устанавливает отступ равным 0)
Если мы возьмем 54
размеры-размеры, мы получим 96x54x54 = 279,936
нейроны - все еще слишком много.
Итак, мой вопрос заключается в следующем:
Как они получают 253440 нейронов для первого сверточного слоя? Чего мне не хватает?
Ответы:
Из примечания Stanfords на NN:
ссылка: http://cs231n.github.io/convolutional-networks/
Эти примечания сопровождают класс CS231n Stanford CS: сверточные нейронные сети для визуального распознавания. По вопросам / проблемам / сообщениям об ошибках, касающимся контактов, свяжитесь с Джастином Джонсоном относительно заданий или свяжитесь с Андреем Карпати в отношении заметок курса
источник
Эта статья действительно сбивает с толку. Во-первых, входной размер изображений неправильный, 224x224 не дает выходных данных 55. Эти нейроны просто похожи на сгруппированные пиксели в одном, поэтому на выходе получается двухмерное изображение случайных значений (значений нейронов). Таким образом, в основном число нейронов = ширина xheightxdepth, никаких секретов, чтобы понять это.
источник