Ich hatte die gleiche Frage im Kopf wie Sie, als Sie dieses Whitepaper gelesen haben, und die Ressourcen, auf die Sie verwiesen haben, haben mir geholfen, eine Implementierung zu finden.
In dem Fackelcode, auf den Sie verwiesen haben , heißt es:
--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :
Das Wort "Tiefe" in Deep Learning ist etwas mehrdeutig. Glücklicherweise bietet diese SO-Antwort Klarheit:
In Deep Neural Networks bezieht sich die Tiefe auf die Tiefe des Netzwerks. In diesem Zusammenhang wird die Tiefe jedoch zur visuellen Erkennung verwendet und in die 3. Dimension eines Bildes übersetzt.
In diesem Fall haben Sie ein Bild und die Größe dieser Eingabe beträgt 32 x 32 x 3 (Breite, Höhe, Tiefe). Das neuronale Netzwerk sollte in der Lage sein, basierend auf diesen Parametern zu lernen, da die Tiefe auf die verschiedenen Kanäle der Trainingsbilder übertragen wird.
DepthConcat verkettet also Tensoren entlang der Tiefenabmessung, die die letzte Abmessung des Tensors und in diesem Fall die dritte Abmessung eines 3D-Tensors ist.
DepthConcat muss die Tensoren in allen Dimensionen außer der Tiefenabmessung gleich machen, wie der Brennercode sagt:
-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.
z.B
A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3).
Im obigen Diagramm sehen wir ein Bild des DepthConcat-Ergebnistensors, wobei der weiße Bereich der Nullpunkt ist, der rote der A-Tensor und der grüne der B-Tensor.
Hier ist der Pseudocode für DepthConcat in diesem Beispiel:
- Schauen Sie sich Tensor A und Tensor B an und finden Sie die größten räumlichen Abmessungen, in diesem Fall die 16 Breiten- und 16 Höhengrößen von Tensor B. Da Tensor A zu klein ist und nicht den räumlichen Abmessungen von Tensor B entspricht, muss er aufgefüllt werden.
- Füllen Sie die räumlichen Dimensionen von Tensor A mit Nullen auf, indem Sie der ersten und zweiten Dimension Nullen hinzufügen, um die Größe von Tensor A (16, 16, 2) zu erhalten.
- Verketten Sie den gepolsterten Tensor A mit dem Tensor B entlang der Tiefenabmessung (3. Dimension).
Ich hoffe, das hilft jemand anderem, der die gleiche Frage beim Lesen dieses White Papers hat.