Ich habe dieses Beispiel entlang programmiert eines Faltungsnetzes in TensorFlow und ich bin durch diese Zuweisung von Gewichten verwirrt:
%Vor%Woher wissen wir, dass die Gewichtsmatrix "wd1" 7 x 7 x 64 Zeilen haben sollte?
Es wird später verwendet, um die Ausgabe der zweiten Faltungsschicht neu zu gestalten:
%Vor%Nach meiner Mathematik hat die Pooling-Schicht 2 (conv2-Ausgang) 4 x 4 x 64 Neuronen.
Warum ändern wir uns auf [-1, 7 * 7 * 64]?
Von Anfang an:
Die Eingabe _X
hat die Größe [28x28x1]
(die Batch-Dimension wird ignoriert). Ein 28x28 Graustufenbild.
Der erste Faltungslayer verwendet PADDING=same
, also gibt er einen 28x28 Layer aus, der dann an ein max_pool
mit k=2
übergeben wird, was jede Dimension um einen Faktor zwei reduziert, was zu einem 14x14 räumlichen Layout führt. conv1 hat 32 Ausgänge - der vollständige pro-Beispiel-Tensor ist nun [14x14x32]
.
Dies wird in conv2
wiederholt, was 64 Ausgaben hat, was zu einem [7x7x64]
führt.
tl; dr: Das Bild beginnt als 28x28 und jeder maxpool reduziert es in jeder Dimension um den Faktor zwei. 28/2/2 = 7.
Diese Frage erfordert, dass Sie ein gutes Verständnis für tiefe Lernfaltungen haben.
Grundsätzlich wird jede Faltungsschicht, die Ihr Modell besitzt, die transversale Fläche der Faltungs-Pyramide reduzieren. Diese Reduzierung wird durch die Schritte convolution stride und max_pooling stride erreicht. Und um die Dinge zu komplizieren, haben wir zwei Optionen basierend auf dem PADDING.
Option 1 - PADDING='SAME'
Option 2 - PADDING='VALID'
Für EACH Convolution und Max Pooling müssen Sie eine neue out_height
und out_width
berechnen. Dann multiplizieren Sie am Ende der Faltungen out_height
, out_width
und die Tiefe Ihrer letzten Faltungsschicht. Das Ergebnis dieser Multiplikation ist die Ausgabe-Feature-Map-Größe, die die Eingabe Ihrer ersten vollständig verbundenen Ebene ist.
In Ihrem Beispiel hatten Sie wahrscheinlich nur PADDING='SAME'
, einen Faltungsschritt von 1 und einen maximalen Pooling-Schritt von 2, zweimal . Am Ende musste man alles nur durch 4 (1,2,1,2) teilen.
Weitere Informationen finden Sie unter tensorflow-API
Tags und Links tensorflow convolution conv-neural-network