Avevo in mente la stessa domanda mentre leggevi quel white paper e le risorse a cui hai fatto riferimento mi hanno aiutato a trovare un'implementazione.
Nel codice Torcia a cui hai fatto riferimento , dice:
--[[ 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 :
La parola "profondità" in Deep learning è un po 'ambigua. Fortunatamente questa risposta SO fornisce una certa chiarezza:
In Deep Neural Networks la profondità si riferisce a quanto è profonda la rete ma in questo contesto, la profondità viene utilizzata per il riconoscimento visivo e si traduce nella terza dimensione di un'immagine.
In questo caso hai un'immagine e la dimensione di questo input è 32x32x3 che è (larghezza, altezza, profondità). La rete neurale dovrebbe essere in grado di apprendere sulla base di questi parametri mentre la profondità si traduce nei diversi canali delle immagini di allenamento.
Quindi DepthConcat concatena i tensori lungo la dimensione della profondità che è l'ultima dimensione del tensore e in questo caso la 3a dimensione di un tensore 3D.
DepthConcat deve rendere uguali i tensori in tutte le dimensioni tranne la profondità, come dice il codice Torcia :
-- 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.
per esempio
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).
Nel diagramma sopra, vediamo un'immagine del tensore del risultato DepthConcat, in cui l'area bianca è il riempimento zero, il rosso è il tensore A e il verde è il tensore B.
Ecco lo pseudo codice per DepthConcat in questo esempio:
- Guarda il tensore A e il tensore B e trova le dimensioni spaziali più grandi, che in questo caso sarebbero le dimensioni 16 e 16 dell'altezza del tensore B. Poiché il tensore A è troppo piccolo e non corrisponde alle dimensioni spaziali del Tensore B, dovrà essere imbottito.
- Riempi le dimensioni spaziali del tensore A con zeri aggiungendo zeri alla prima e alla seconda dimensione ottenendo la dimensione del tensore A (16, 16, 2).
- Concatena il tensore A imbottito con il tensore B lungo la profondità (3a) dimensione.
Spero che questo aiuti qualcun altro a pensare la stessa domanda leggendo quel white paper.