Сверточный слой для полностью подключенного слоя в CNN

Я не понимаю, как преобразовать последний слой максимального уровня (256x13x13) в полностью подключенный уровень (4096x1x1).

Вместо 4096, не должно быть 256 * 13 * 13 = 43264?

РЕДАКТИРОВАТЬ. Как было сделано 4096, когда мы плотно заполняем последний слой максимального уровня (256x13x13)?

Convolutional Neural Network

Ответы

Ответ 1

Если я прав, вы спрашиваете, почему уровень 4096x1x1 намного меньше.

Это потому, что это полностью связанный слой. Каждый нейрон из последнего слоя максимального пула (= 43264 нейронов) подключается к каждому слою полностью связанного слоя.

Это пример ВСЕХ подключенных нейронных сетей: enter image description here Как вы можете видеть, layer2 больше, чем layer3. Это не значит, что они не могут подключиться.

Нет конверсии последнего слоя максимального пула → все нейроны в слое с максимальным пулом просто связаны со всеми 4096 нейронами в следующем слое.

"Плотная" операция просто означает вычисление весов и смещений всех этих соединений (= 4096 * 43264 соединений) и добавление смещения нейронов для вычисления следующего выхода.

Это было связано с MLP.

Но почему 4096? Нет никаких оснований. Это просто выбор. Это могло быть 8000, это могло быть 20, это просто зависит от того, что лучше всего подходит для сети.

Ответ 2

Нет, 4096 - размерность выхода этого слоя, а размерность входа - 13x13x256. Оба они не должны быть равны, как вы видите на диаграмме.

Ответ 3

Вы правы в том, что последний сверточный слой имеет 256 x 13 x 13 = 43264 нейронов. Однако существует слой с максимальным pool_size = 2 с stride = 3 и pool_size = 2. Это даст выход размером 256 x 6 x 6. Вы подключаете это к полностью подключенному слою. Для этого вам сначала нужно сгладить выход, который примет форму - 256 x 6 x 6 = 9216 x 1. Чтобы отобразить 9216 нейронов на 4096 нейронов, мы вводим весовую матрицу 9216 x 4096 в качестве веса плотного/полностью связанного слоя. Следовательно, w^T * x = [9216 x 4096]^T * [9216 x 1] = [4096 x 1]. Короче говоря, каждый из нейронов 9216 будет связан со всеми 4096 нейронами. Именно поэтому слой называется плотным или полностью связанным слоем.

Как говорили другие выше, нет жесткого правила о том, почему это должно быть 4096. Плотный слой просто должен иметь достаточное количество нейронов, чтобы фиксировать изменчивость всего набора данных. Рассматриваемый набор данных - ImageNet 1K - довольно сложный и имеет 1000 категорий. Так что 4096 нейронов, чтобы начать с, кажется, не слишком много.

Ответ 4

Размер выходного слоя пула

output = (input size - window size) / (stride + 1)

в приведенном выше случае размер ввода равен 13, большинство реализаций объединения добавляют дополнительный слой прокладки, чтобы сохранить граничные пиксели в вычислениях, поэтому размер ввода станет равным 14.

самый общий размер окна и шаг - W = 2 и S = 2, поэтому поместите их в формулу

output = (14 - 2) / (2 + 1)
output = 12 / 3
output = 4

теперь будет 256 карт характеристик, сделанных размером 4x4, сгладить это, и вы получите

flatten = 4 x 4 x 256
flatten = 4096

Надеюсь, что это ответ на ваш вопрос.

Ответ 5

Я покажу его по изображению, посмотрите ниже изображение сети Alexnet

enter image description here

Уровень 256 * 13 *13 будет выполнять max pooling оператор max pooling тогда он будет 256 * 6 * 6= 9216. Затем будет сглажен к подключению к 4096. Полностью подключите сеть, поэтому параметры будут равны 9216 * 4096. Вы можете увидеть все параметры, вычисленные в приведенном ниже excel.

enter image description here

enter image description here

цитируется:

https://www.learnopencv.com/understanding-alexnet/

https://medium.com/@smallfishbigsea/a-walk-through-of-alexnet-6cbd137a5637