W Alex Krizhevsky i in. Klasyfikacja Imagenet z głębokimi splotowymi sieciami neuronowymi wyliczają liczbę neuronów w każdej warstwie (patrz diagram poniżej).
Dane wejściowe sieci są 150 528-wymiarowe, a liczba neuronów w pozostałych warstwach sieci wynosi 253 340–186,624–64 896–64 8896–43,264– 4096–4096–1000.
Widok 3D
Liczba neuronów dla wszystkich warstw po pierwszej jest wyraźna. Jednym prostym sposobem obliczenia neuronów jest po prostu pomnożenie trzech wymiarów tej warstwy ( planes X width X height
):
- Warstwa 2:
27x27x128 * 2 = 186,624
- Warstwa 3:
13x13x192 * 2 = 64,896
- itp.
Jednak patrząc na pierwszą warstwę:
- Warstwa 1:
55x55x48 * 2 = 290400
Zauważ, że nie jest to253,440
określone w dokumencie!
Oblicz rozmiar wyjściowy
Innym sposobem obliczenia wyjściowego tensora splotu jest:
Jeśli obraz wejściowy jest tensorem 3D
nInputPlane x height x width
, rozmiar obrazu wyjściowego będzie wynosiłnOutputPlane x owidth x oheight
gdzie
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1
.
(z dokumentacji Torch SpatialConvolution )
Obraz wejściowy to:
nInputPlane = 3
height = 224
width = 224
A warstwa splotowa to:
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(np. rozmiar jądra 11
, krok 4
)
Po podłączeniu tych liczb otrzymujemy:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Więc brakuje nam jednego z 55x55
wymiarów, które musimy dopasować do papieru. Mogą być wypełnienia (ale cuda-convnet2
model wyraźnie ustawia wypełnienie na 0)
Jeśli weźmiemy 54
wymiary-rozmiar, otrzymujemy 96x54x54 = 279,936
neurony - wciąż za dużo.
Więc moje pytanie brzmi:
Jak uzyskują 253,440 neuronów dla pierwszej warstwy splotowej? czego mi brakuje?