Jak obliczyć liczbę parametrów konwolucyjnych sieci neuronowych?
Nie mogę podać poprawnej liczby parametrów AlexNet lub VGG Net.
Na przykład, aby obliczyć liczbę parametrów conv3-256
warstwy Sieci VGG, odpowiedź wynosi 0,59 M = (3*3)*(256*256), jest to (rozmiar jądra) * (iloczyn liczby obu kanałów w warstwach łączonych), jednak w ten sposób nie mogę uzyskać parametrów 138M
.
Więc czy mógłbyś mi pokazać, gdzie jest źle z moimi obliczeniami, lub pokazać mi właściwą procedurę obliczania?
3 answers
Jeśli odnosisz się do sieci VGG z 16-warstwową (tabela 1, kolumna D), to 138M
odnosi się do całkowitej liczby parametrów tej sieci, tzn. obejmującej wszystkie warstwy convolutional, ale także te w pełni połączone.
Patrząc na 3. etap konwolucyjny złożony z 3 x conv3-256
warstw:
- pierwszy ma N = 128 płaszczyzn wejściowych i F=256 płaszczyzn wyjściowych,
- dwa pozostałe mają N = 256 płaszczyzn wejściowych i F=256 płaszczyzn wyjściowych.
The convolution kernel jest 3x3 dla każdej z tych warstw. Pod względem parametrów daje to:
- 128x3x3x256 (waga) + 256 (waga) = 295,168 parametrów dla pierwszego,
- 256x3x3x256 (waga) + 256 (waga) = 590,080 parametrów dla dwóch pozostałych.
Jak wyjaśniono powyżej, musisz to zrobić dla wszystkich warstw, ale także tych w pełni połączonych i zsumować te wartości, aby uzyskać ostateczną liczbę 138M.
-
UPDATE : podział na warstwy dają:
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
W szczególności dla warstw w pełni połączonych (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) patrz sekcja 3.2 artykułu: w pełni połączone warstwy są najpierw konwertowane do warstw konwolucyjnych (pierwsza warstwa FC do conv 7 × 7. warstwa, dwie ostatnie warstwy FC do 1 × 1 conv. warstw).
Szczegóły dotyczące fc1
Jak podano powyżej rozdzielczość przestrzenna tuż przed podaniem w pełni połączonych warstw wynosi 7x7 pikseli. To dlatego, że ten VGG Net używa podkładek przestrzennych przed splotami, zgodnie z sekcją 2.1 artykułu:
[...] spatial padding of conv. wejście warstwowe jest takie, że rozdzielczość przestrzenna jest zachowana po splotach, tzn. padding wynosi 1 piksel dla conv 3×3. warstwy.
Przy takim paddingu i pracy z obrazem wejściowym 224x224 pikseli Rozdzielczość maleje w następujący sposób wzdłuż warstw: 112x112, 56x56, 28x28, 14x14 i 7x7 po ostatnim etapie splatania/łączenia który posiada 512 map Fabularnych.
Daje to wektor funkcji przekazany do {[4] } o wymiarze: 512x7x7.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-31 09:50:06
Wielki podział obliczeń dla sieci VGG-16 jest również podany w CS231n uwagach do wykładu.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 17:05:22
Wiem, że to stary post, ale myślę, że przyjęta odpowiedź przez @ deltheil zawiera błąd. Jeśli nie, byłbym szczęśliwy, mogąc zostać poprawionym. Warstwa splotu nie powinna mieć odchylenia. tj. 128x3x3x256 (waga) + 256 (waga) = 295,168 powinno być 128x3x3x256 ( waga) = 294,9112
Thanks
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-05 11:26:35