Wie bekommt Krizhevskys '12 CNN 253.440 Neuronen in der ersten Schicht?

24

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.

CNN

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 oheightwo

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 55x55Maße, die wir für das Papier benötigen. Möglicherweise handelt es sich um Auffüllungen (das cuda-convnet2Modell setzt die Auffüllungen jedoch explizit auf 0).

Wenn wir die 54Dimensionen -size annehmen, erhalten wir 96x54x54 = 279,936Neuronen - immer noch zu viele.

Meine Frage lautet also:

Wie bekommen sie 253.440 Neuronen für die erste Faltungsschicht? Was vermisse ich?

R. Girard
quelle
Hast du das jemals gelöst? Nur um pedantisch mit Ihren Berechnungen umzugehen: owidth und oheight wären tatsächlich 54,25. Ich habe versucht, dies herauszufinden, und als ersten Schritt habe ich die angeblichen 253440 Neuronen auf 96 Filter aufgeteilt, was 2640 Neuronen pro Filter ergibt. Dies ist keine quadratische Zahl. Entweder haben wir beide hier ein Missverständnis, oder es liegt ein Fehler der Autoren vor ... Haben Sie Kontakt mit ihnen aufgenommen?
Anderas
bei mir auch, das verwirrt mich sehr. übrigens stimmt der eingang ist 224x224x3? Ich denke, es muss 227x227x3 sein. Mal sehen, ob wir 227x227 haben, 5 Zellen auf der ersten linken und 5 Zellen auf der letzten rechten Seite können nicht das Zentrum der Kernelfaltung mit der Größe 11x11 sein. Das erste Zentrum des Kernels ist also Zelle (6,6) und das letzte Zentrum des Kernels in der ersten Reihe ist Zelle (6x222). Mit Stride-4 erhalten wir das Zentrum des Kernels in Zeile 6 -1) * 4, so dass die Spalte 222 das k-te Zentrum ist = (222-6) / 4 +1 = 55.
4
Beachten Sie, dass 48 * 48 * 55 * 2 = 253440 ist, sodass es bei der Berechnung der Anzahl der Neuronen in der ersten Ebene zu Tippfehlern kommen kann (multipliziert mit 48 anstelle von 55).
Tsiki
@Firebug Dies ist eine interessante Verwendung des Tags [references]. Ich dachte, wir verwenden es nur für Fragen, die Referenzen verlangen . Aber vielleicht habe ich mich geirrt. Benutzt du es anders?
Amöbe sagt Reinstate Monica

Antworten:

8

Aus der Stanfords-Notiz zu NN:

Beispiel aus der Praxis. Das Patent von Krizhevsky et al. Architektur, die 2012 die ImageNet-Herausforderung gewonnen hat, akzeptierte Bilder der Größe [227x227x3]. In der ersten Faltungsschicht wurden Neuronen mit einer Empfangsfeldgröße von F = 11, einem Schritt von S = 4 und ohne Nullpolsterung von P = 0 verwendet. Da (227 - 11) / 4 + 1 = 55 und die Conv-Schicht eine Tiefe von K = 96 hatte, hatte das Ausgabevolumen der Conv-Schicht die Größe [55 x 55 x 96]. Jedes der 55 × 55 × 96 Neuronen in diesem Volumen war mit einem Bereich der Größe [11 × 11 × 3] im Eingabevolumen verbunden. Darüber hinaus sind alle 96 Neuronen in jeder Tiefenspalte mit derselben [11x11x3] Region der Eingabe verbunden, aber natürlich mit unterschiedlichen Gewichten. Spaß beiseite, wenn Sie das aktuelle Papier lesen, wird behauptet, dass die Eingabebilder 224 x 224 waren, was sicherlich falsch ist, da (224 - 11) / 4 + 1 ganz klar keine ganze Zahl ist. Dies hat viele Menschen in der Geschichte von ConvNets verwirrt, und es ist nur wenig darüber bekannt, was passiert ist. Ich gehe davon aus, dass Alex ein Null-Auffüllen von 3 zusätzlichen Pixeln verwendet hat, das er in der Veröffentlichung nicht erwähnt.

ref: http://cs231n.github.io/convolutional-networks/

Diese Hinweise begleiten die Stanford CS-Klasse CS231n: Convolutional Neural Networks for Visual Recognition. Bei Fragen / Bedenken / Fehlermeldungen bezüglich der Aufgaben wenden Sie sich bitte an Justin Johnson oder an Andrej Karpathy bezüglich der Kursunterlagen

Speck
quelle
Ist es möglich, Kredit zu geben, indem der Autor dieser Notizen genannt wird?
Silverfish
Die Autoren beziehen sich im Anhang eindeutig auf sich selbst, siehe cs231n.github.io
Bacon,
2
Wenn Sie dem Link folgen, werden sie zwar eindeutig referenziert, das Zitat wird jedoch auch hier angezeigt. Daher sollte auch hier eine Anrechnung erfolgen. Das ist teilweise höflich, aber auch deshalb, weil der Link möglicherweise nicht mehr funktioniert (z. B. wenn das Material entfernt / bezahlt / an eine neue Adresse verschoben wird). Leider haben wir ein schwerwiegendes Problem mit "Link Rot" auf dieser Website - obwohl wir beabsichtigen, als Langzeitspeicher für qualitativ hochwertige Antworten auf statistische Fragen zu dienen, wurden viele unserer älteren Antworten durch Links, die nicht mehr funktionieren, überholt . Daher ist es im Allgemeinen sicherer, Antworten so eigenständig wie möglich zu gestalten.
Silverfish
0

Dieses Papier ist wirklich verwirrend. Zunächst einmal ist die Eingabegröße von Bildern falsch. 224 x 224 ergibt keine Ausgabe von 55. Diese Neuronen sind einfach wie gruppierte Pixel in einem, sodass die Ausgabe ein 2D-Bild von Zufallswerten (Neuronenwerten) ist. Also im Grunde genommen ist die Anzahl der Neuronen = Breite x Höhe x Tiefe, es gibt keine Geheimnisse, um dies herauszufinden.

Moe
quelle