Как рассчитать количество параметров сверточных нейронных сетей?
Я не могу дать правильное количество параметров 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!