In Alex Krizhevsky et al. Imagenet-Klassifikation mit tiefen neuronalen Faltungsnetzen zählt sie die Anzahl der Neuronen in jeder Schicht auf (siehe Abbildung unten).
Die Eingabe des Netzwerks ist 150.528-dimensional und die Anzahl der Neuronen in den verbleibenden Schichten des Netzwerks wird durch 253.440–186.624–64.896–64.896–43.264– 4096–4096–1000 angegeben.
Eine 3D-Ansicht
Die Anzahl der Neuronen für alle Schichten nach der ersten ist klar. Eine einfache Methode zur Berechnung der Neuronen besteht darin, einfach die drei Dimensionen dieser Schicht zu multiplizieren ( planes X width X height
):
- Schicht 2:
27x27x128 * 2 = 186,624
- Schicht 3:
13x13x192 * 2 = 64,896
- etc.
Betrachtet man jedoch die erste Schicht:
- Schicht 1:
55x55x48 * 2 = 290400
Beachten Sie, dass dies nicht 253,440
den Angaben auf dem Papier entspricht!
Ausgabegröße berechnen
Der andere Weg, den Ausgangstensor einer Faltung zu berechnen, ist:
Wenn das Eingangsbild ein 3D - Tensor ist
nInputPlane x height x width
, wird die Ausgabe Bildgröße sein ,nOutputPlane x owidth x oheight
wo
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1
.
(aus der Torch SpatialConvolution-Dokumentation )
Das Eingabebild ist:
nInputPlane = 3
height = 224
width = 224
Und die Faltungsschicht ist:
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(zB Kernelgröße 11
, Schrittweite 4
)
Wenn wir diese Zahlen eingeben, erhalten wir:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Wir haben also nicht die 55x55
Maße, die wir für das Papier benötigen. Möglicherweise handelt es sich um Auffüllungen (das cuda-convnet2
Modell setzt die Auffüllungen jedoch explizit auf 0).
Wenn wir die 54
Dimensionen -size annehmen, erhalten wir 96x54x54 = 279,936
Neuronen - immer noch zu viele.
Meine Frage lautet also:
Wie bekommen sie 253.440 Neuronen für die erste Faltungsschicht? Was vermisse ich?