web-dev-qa-db-de.com

Wie berechnet man die Anzahl der Parameter von neuronalen Faltungsnetzen?

Ich kann nicht die richtige Anzahl von Parametern für AlexNet oder VGG Net angeben.

Um beispielsweise die Anzahl der Parameter einer conv3-256-Schicht von VGG Net zu berechnen, lautet die Antwort 0,59M = (3 * 3) * (256 * 256), d Die Verbindungsschichten), aber auf diese Weise bekomme ich die 138M-Parameter nicht.

Könnten Sie mir bitte zeigen, wo meine Berechnung falsch ist, oder mir das richtige Berechnungsverfahren zeigen?

36
Eric

Wenn Sie sich auf VGG Net mit 16 Schichten (Tabelle 1, Spalte D) beziehen, bezieht sich 138M auf die Gesamtzahl der Parameter dieses Netzwerks, d. H. Alle Faltungsschichten, aber auch die vollständig verbundenen.

Betrachtet man die dritte Faltungsstufe, bestehend aus 3 x conv3-256 Schichten:

  • die erste hat N = 128 Eingabeebenen und F = 256 Ausgabeebenen,
  • die beiden anderen haben N = 256 Eingabeebenen und F = 256 Ausgabeebenen.

Der Faltungskern ist für jede dieser Schichten 3x3. In Bezug auf die Parameter ergibt dies:

  • 128x3x3x256 (Gewichte) + 256 (Vorspannungen) = 295.168 Parameter für den ersten Parameter,
  • 256x3x3x256 (Gewichte) + 256 (Vorspannungen) = 590.080 Parameter für die beiden anderen.

Wie oben erklärt, müssen Sie dies für alle Layer tun, aber auch für die vollständig verbundenen, und diese Werte summieren, um die endgültige 138M-Nummer zu erhalten.

-

UPDATE: Die Aufteilung nach Ebenen ergibt:

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

Insbesondere für die vollständig verbundenen Schichten (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) siehe Abschnitt 3.2 des Artikels: Die vollständig verbundenen Schichten werden zuerst in Faltungsschichten umgewandelt (die erste FC-Schicht ist eine 7 × 7-Konv.-Schicht, die letzten beiden FC-Schichten sind 1 × 1-Konv.-Schicht.) .

Details zu fc1

Oberhalb der räumlichen Auflösung unmittelbar vor dem Einspeisen der vollständig verbundenen Schichten liegen 7x7 Pixel. Dies liegt daran, dass dieses VGG-Netz räumliche Auffüllung vor Windungen verwendet, wie in Abschnitt 2.1 der Veröffentlichung beschrieben:

[...] die räumliche Auffüllung von conv. Die Layer-Eingabe ist so, dass die räumliche Auflösung nach der Faltung erhalten bleibt, d. h. die Auffüllung beträgt 1 Pixel für 3 × 3 Conv. Schichten.

Bei einer solchen Auffüllung und beim Arbeiten mit einem Eingabebild von 224 x 224 Pixeln nimmt die Auflösung entlang der Schichten wie folgt ab: 112 x 112, 56 x 56, 28 x 28, 14 x 14 und 7 x 7 nach der letzten Faltungs/Pooling-Stufe, die 512 Merkmalskarten aufweist.

Dies ergibt einen Merkmalsvektor, der an fc1 mit der Dimension 512x7x7 übergeben wird.

55
deltheil

Eine ausführliche Aufschlüsselung der Berechnung für das VGG-16-Netzwerk finden Sie auch in 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
40
Ray

Ich weiß, das ist trotzdem ein alter Beitrag, ich denke, die akzeptierte Antwort von @deltheil enthält einen Fehler. Wenn nicht, würde ich mich freuen, korrigiert zu werden. Die Faltungsschicht sollte keine Vorspannung haben. 128x3x3x256 (Gewichte) + 256 (Vorspannungen) = 295.168 Sollte .__ sein. 128x3x3x256 (Gewichte) = 294,9112 

Vielen Dank

1
rav

So berechnen Sie die Anzahl der Parameter in jeder Cnn-Schicht:
einige Definitionen
n - Breite des Filters
m - Filterhöhe
k - Anzahl der Eingabemerkmalkarten
L - Anzahl der Ausgabe-Feature-Maps
Dann Anzahl der Parameter # = (n * m * k + 1) * L, in der der erste Beitrag von .__ stammt. Gewichte und die zweite ist von Vorspannung. 

1
saunter

Die folgende VGG-16-Architektur befindet sich in der Originalarbeit, wie durch @deltheil in (Tabelle 1, Spalte D) hervorgehoben, und ich zitiere von dort

2.1 ARCHITEKTUR

Während des Trainings haben unsere ConvNets eine feste Größe von 224 × 224 RGB-Bilder. Die einzige Vorverarbeitung, die wir durchführen, ist das Abziehen des Mittelwertes RGB Wert, berechnet aus dem Trainingssatz, von jedem Pixel.

Das Bild wird durch einen Stapel von Convolutional-Ebenen (Konv.) Geleitet. Dabei verwenden wir Filter mit einem sehr kleinen Empfangsfeld: 3 × 3 (wobei die kleinste Größe ist, um die Vorstellung von links/rechts, auf/ab, Mitte zu erfassen). Der Faltungsschritt ist auf 1 Pixel festgelegt; das räumliche Polsterung von conv. Die Ebeneneingabe ist so, dass die räumliche Auflösung .__ ist. nach Faltung erhalten bleibt, d. h. die Auffüllung beträgt 1 Pixel für 3 × 3. conv. Schichten. Das räumliche Pooling wird durch fünf max-Pooling durchgeführt Schichten, die einige der Conv folgen. Layer (nicht alle Conv . Layer werden von max-pooling gefolgt). Max-Pooling wird über eine 2 .__ durchgeführt. × 2 Pixel Fenster mit Schritt 2.

Auf einen Stapel von Faltungsschichten (der in unterschiedlichen Architekturen eine unterschiedliche Tiefe aufweist) folgen drei Fully-Connected (FC) Schichten: Die ersten zwei haben jeweils 4096 Kanäle, die dritte führt 1000-Wege-ILSVRC-Klassifizierung und enthält somit 1000 Kanäle (einen Für jede Klasse). 

Die letzte Schicht ist die Soft-Max-Schicht.

Verwenden Sie das oben und 

  • Eine Formel zur Ermittlung der Aktivierungsform einer Ebene!

  • Eine Formel zur Berechnung der Gewichte für jede Schicht:

Hinweis:

  • sie können die jeweilige Aktivierungsformspalte einfach multiplizieren, um die Aktivierungsgröße zu erhalten

  • CONV3: bedeutet, dass ein Filter von 3 * 3 am Eingang gefaltet wird!

  • MAXPOOL3-2: bedeutet, 3. Pooling-Layer, mit 2 * 2-Filter, Schritt = 2, Auffüllen = 0 (ziemlich Standard beim Pooling-Layer)

  • Stufe 3: bedeutet, dass mehrere CONV-Layer gestapelt sind! mit der gleichen Auffüllung = 1, Schritt = 1 und Filter 3 * 3

  • Cin: bedeutet die Tiefe eines Kanals, der von der Eingabeebene kommt!

  • Cout: bedeutet die Tiefe a.k.a eines ausgehenden Kanals (Sie konfigurieren ihn anders, um komplexere Funktionen zu lernen!),

Cin und Cout sind die Anzahl der Filter, die Sie aufeinander stapeln, um mehrere Features in verschiedenen Maßstäben zu erlernen, z. B. in der ersten Ebene, in der Sie vertikale Kanten lernen möchten, und horizontale Kanten und Kanten etwa bei 45 °, blah blah!, 64 verschiedene Filter jeweils unterschiedliche Kanten !! 

  • n: Eingabemaß ohne Tiefe wie n = 224 bei INPUT-Bild!

  • p: Auffüllen für jede Schicht

  • s: Schritt für jede Schicht

  • f: Filtergröße, dh 3 * 3 für CONV und 2 * 2 für MAXPOOL-Schichten! 

  • Nach MAXPOOL5-2 wird das Volumen einfach abgeflacht und mit der ersten FC-Schicht verbunden.!

Wir bekommen die Tabelle: enter image description here

Wenn Sie schließlich alle in der letzten Spalte berechneten Gewichtungen hinzufügen, erhalten Sie schließlich 138.357.544 (138 Millionen) Parameter, um auf VGG-15 zu trainieren!

0
anu