Как рассчитать количество параметров сверточных нейронных сетей?

Я не могу дать правильное количество параметров AlexNet или VGG Net.

Например, чтобы вычислить количество параметров слоя conv3-256 VGG Net, ответ равен 0,59M = (3 * 3) * (256 * 256), то есть (размер ядра) * (произведение оба числа каналов в совлокальных слоях), однако, таким образом, я не могу получить параметры 138M.

Итак, не могли бы вы показать мне, где не так с моими расчетами, или показать мне правильную процедуру расчета?

Ответ 1

Если вы ссылаетесь на VGG Net с 16-слойным (таблица 1, столбец D), то 138M ссылается на общее количество параметров этой сети, то есть включает все сверточные слои, но также полностью подключенные.

Глядя на 3-й сверточный этап, состоящий из слоев 3 x conv3-256:

  • первая имеет N = 128 входных плоскостей и F = 256 выходных плоскостей,
  • два других имеют N = 256 входных плоскостей и F = 256 выходных плоскостей.

Ядро свертки 3x3 для каждого из этих слоев. По параметрам это дает:

  • 128x3x3x256 (вес) + 256 (смещения) = 295,168 параметров для 1-го,
  • 256x3x3x256 (вес) + 256 (смещения) = 590 080 параметров для двух других.

Как объяснялось выше, вы должны сделать это для всех слоев, а также полностью подключенных, и суммировать эти значения, чтобы получить окончательное число 138M.

-

UPDATE: пробой между слоями дает:

conv3-64  x 2       : 38,720
conv3-128 x 2       : 221,440
conv3-256 x 3       : 1,475,328
conv3-512 x 3       : 5,899,776
conv3-512 x 3       : 7,079,424
fc1                 : 102,764,544
fc2                 : 16,781,312
fc3                 : 4,097,000
TOTAL               : 138,357,544

В частности, для полностью связанных слоев (fc):

 fc1 (x): (512x7x7)x4,096 (weights) + 4,096 (biases)
 fc2    : 4,096x4,096     (weights) + 4,096 (biases)
 fc3    : 4,096x1,000     (weights) + 1,000 (biases)

(x) см. раздел 3.2 статьи: полностью связанные слои сначала преобразуются в сверточные слои (первый слой FC - слой 7 × 7, последние два слоя FC - 1 × 1 конв. слоев).

Подробнее о fc1

Как указано выше, пространственное разрешение прямо перед подачей полностью подключенных слоев составляет 7x7 пикселей. Это связано с тем, что эта VGG Net использует пространственное дополнение до сверток, как подробно описано в разделе 2.1 документа:

[...] пространственное дополнение conv. что пространственное разрешение сохраняется после свертки, т.е. заполнение составляет 1 пиксель для 3 × 3 конв. слои.

При таком заполнении и работе с входным изображением 224x224 пикселей разрешение уменьшается, как следует вдоль слоев: 112x112, 56x56, 28x28, 14x14 и 7x7 после последней стадии свертки/пула, которая имеет 512 карт функций.

Это дает вектор функций, переданный fc1 с размером: 512x7x7.

Ответ 2

Большая разбивка расчета для сети VGG-16 также приведена в примечаниях CS231n.

INPUT:     [224x224x3]    memory:  224*224*3=150K   weights: 0
CONV3-64:  [224x224x64]   memory:  224*224*64=3.2M  weights: (3*3*3)*64 = 1,728
CONV3-64:  [224x224x64]   memory:  224*224*64=3.2M  weights: (3*3*64)*64 = 36,864
POOL2:     [112x112x64]   memory:  112*112*64=800K  weights: 0
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M weights: (3*3*64)*128 = 73,728
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M weights: (3*3*128)*128 = 147,456
POOL2:     [56x56x128]    memory:  56*56*128=400K   weights: 0
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*128)*256 = 294,912
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
CONV3-256: [56x56x256]    memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
POOL2:     [28x28x256]    memory:  28*28*256=200K   weights: 0
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*256)*512 = 1,179,648
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [28x28x512]    memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
POOL2:     [14x14x512]    memory:  14*14*512=100K   weights: 0
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]    memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
POOL2:     [7x7x512]      memory:  7*7*512=25K      weights: 0
FC:        [1x1x4096]     memory:  4096             weights: 7*7*512*4096 = 102,760,448
FC:        [1x1x4096]     memory:  4096             weights: 4096*4096 = 16,777,216
FC:        [1x1x1000]     memory:  1000             weights: 4096*1000 = 4,096,000

TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
TOTAL params: 138M parameters

Ответ 3

Я знаю, что это старый пост, тем не менее, я думаю, что принятый ответ @deltheil содержит ошибку. Если нет, я был бы рад исправить ситуацию. Сверточный слой не должен иметь смещения. то есть   128x3x3x256 (вес) + 256 (смещения) = 295 168 должно быть   128x3x3x256 (вес) = 294,9112

Спасибо

Ответ 4

Вот как можно вычислить количество параметров в каждом слое cnn:
некоторые определения
n - ширина фильтра
м - высота фильтра
k - количество карт входных объектов
L - количество выходных карт объектов
Тогда число параметров # = (n * m * k + 1) * L, в которых первый вклад от весов, а второй от смещения.

Ответ 5

Приведенная ниже архитектура VGG-16 приведена в оригинальном документе, выделенном @deltheil в (таблица 1, столбец D), и я привожу оттуда

2.1 АРХИТЕКТУРА

Во время обучения вход в наши ConvNets представляет собой изображения RGB фиксированного размера 224 × 224. Единственная предварительная обработка, которую мы делаем, - это вычитание среднего значения RGB, вычисленного на обучающем наборе, из каждого пикселя.

Изображение пропускается через стопку сверточных (конв.) Слоев, где мы используем фильтры с очень маленьким восприимчивым полем: 3 × 3 (это наименьший размер, чтобы уловить представление о левом/правом, вверх/вниз, центре), Шаг свертки фиксирован до 1 пикселя; пространственное заполнение конв. входные данные слоя таковы, что пространственное разрешение сохраняется после свертки, то есть заполнение составляет 1 пиксель для 3 × 3 конв. слои. Пространственное объединение осуществляется пятью слоями с максимальным объединением, которые следуют за некоторыми из конвоев. Слои (не все конвективные слои сопровождаются максимальным пулом). Максимальное объединение выполняется в окне 2 × 2 пикселя с шагом 2.

За стеком сверточных уровней (который имеет разную глубину в разных архитектурах) следуют три уровня Fully-Connected (FC): первые два имеют 4096 каналов каждый, третий выполняет классификацию ILSVRC с 1000 путями и, таким образом, содержит 1000 каналов (один для каждого класса).

Последний слой - это слой soft-max.

Используя вышеизложенное, и

  • Формула, чтобы найти форму активации слоя!

oucTkt.jpg

  • Формула для расчета весов, соответствующих каждому слою:

R8F7a.png

Замечания:

  • Вы можете просто умножить соответствующий столбец формы активации, чтобы получить размер активации

  • CONV3: означает, что фильтр 3 * 3 будет свертываться на входе!

  • MAXPOOL3-2: означает, 3-й слой пула, с фильтром 2 * 2, шаг = 2, отступ = 0 (довольно стандартно в пулах)

  • Этап-3: означает, что он имеет несколько слоев CONV! с одинаковыми отступами = 1, шагом = 1 и фильтром 3 * 3

  • Cin: означает глубину или канал, идущий от входного слоя!

  • Cout: означает глубину aka исходящего канала (вы настраиваете его differently- для изучения более сложных функций!),

Cin и Cout - это количество фильтров, которые вы складываете вместе, чтобы изучить несколько объектов в разных масштабах, например, в первом слое вы можете захотеть выучить вертикальные ребра, а также горизонтальные ребра и ребра, скажем, 45 градусов, бла-бла !, 64 возможных разных фильтров каждый из разного рода краев !!

  • n: входной размер без глубины, такой как n = 224 в случае INPUT-изображения!

  • p: отступ для каждого слоя

  • s: шаг, используемый для каждого слоя

  • f: размер фильтра, т.е. 3 * 3 для CONV и 2 * 2 для слоев MAXPOOL!

  • После MAXPOOL5-2 вы просто выравниваете объем и соединяете его с первым слоем FC.!

Мы получаем таблицу: enter image description here

Наконец, если вы добавите все веса, рассчитанные в последнем столбце, вы получите 138 357 544 (138 миллионов) параметров для подготовки к VGG-15!