Сверточный слой для полностью подключенного слоя в CNN
Я не понимаю, как преобразовать последний слой максимального уровня (256x13x13) в полностью подключенный уровень (4096x1x1).
Вместо 4096, не должно быть 256 * 13 * 13 = 43264?
РЕДАКТИРОВАТЬ. Как было сделано 4096, когда мы плотно заполняем последний слой максимального уровня (256x13x13)?
Ответы
Ответ 1
Если я прав, вы спрашиваете, почему уровень 4096x1x1
намного меньше.
Это потому, что это полностью связанный слой. Каждый нейрон из последнего слоя максимального пула (= 43264 нейронов) подключается к каждому слою полностью связанного слоя.
Это пример ВСЕХ подключенных нейронных сетей: Как вы можете видеть, 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
Уровень 256 * 13 *13
будет выполнять max pooling
оператор max pooling
тогда он будет 256 * 6 * 6
= 9216. Затем будет сглажен к подключению к 4096. Полностью подключите сеть, поэтому параметры будут равны 9216 * 4096. Вы можете увидеть все параметры, вычисленные в приведенном ниже excel.
цитируется:
https://www.learnopencv.com/understanding-alexnet/
https://medium.com/@smallfishbigsea/a-walk-through-of-alexnet-6cbd137a5637