J'avais la même question en tête lorsque vous avez lu ce livre blanc et les ressources auxquelles vous avez fait référence m'ont aidé à trouver une mise en œuvre.
Dans le code Torch auquel vous avez fait référence , il est dit:
--[[ 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 :
Le mot «profondeur» dans le Deep learning est un peu ambigu. Heureusement, cette réponse SO apporte une certaine clarté:
Dans les réseaux de neurones profonds, la profondeur fait référence à la profondeur du réseau, mais dans ce contexte, la profondeur est utilisée pour la reconnaissance visuelle et se traduit par la 3ème dimension d'une image.
Dans ce cas, vous avez une image et la taille de cette entrée est 32x32x3 (largeur, hauteur, profondeur). Le réseau neuronal devrait être en mesure d'apprendre sur la base de ces paramètres à mesure que la profondeur se traduit par les différents canaux des images d'entraînement.
Donc DepthConcat concatène les tenseurs le long de la dimension de profondeur qui est la dernière dimension du tenseur et dans ce cas la 3ème dimension d'un tenseur 3D.
DepthConcat doit rendre les tenseurs identiques dans toutes les dimensions sauf la dimension de profondeur, comme le dit le code Torch :
-- 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.
par exemple
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).
Dans le diagramme ci-dessus, nous voyons une image du tenseur de résultat DepthConcat, où la zone blanche est le remplissage zéro, le rouge est le tenseur A et le vert est le tenseur B.
Voici le pseudo-code de DepthConcat dans cet exemple:
- Regardez le tenseur A et le tenseur B et trouvez les plus grandes dimensions spatiales, qui dans ce cas seraient les 16 largeurs et 16 hauteurs du tenseur B. Étant donné que le tenseur A est trop petit et ne correspond pas aux dimensions spatiales du tenseur B, il devra être rembourré.
- Remplissez les dimensions spatiales du tenseur A avec des zéros en ajoutant des zéros aux première et deuxième dimensions pour créer la taille du tenseur A (16, 16, 2).
- Concaténer le tenseur rembourré A avec le tenseur B le long de la profondeur (3ème) dimension.
J'espère que cela aide quelqu'un d'autre qui pense à la même question en lisant ce livre blanc.