Tenía la misma pregunta en mente mientras leía el libro blanco y los recursos a los que ha hecho referencia me han ayudado a encontrar una implementación.
En el código de la antorcha al que hace referencia , 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 palabra "profundidad" en el aprendizaje profundo es un poco ambigua. Afortunadamente, esta respuesta SO proporciona cierta claridad:
En Deep Neural Networks, la profundidad se refiere a la profundidad de la red, pero en este contexto, la profundidad se utiliza para el reconocimiento visual y se traduce en la tercera dimensión de una imagen.
En este caso tiene una imagen, y el tamaño de esta entrada es 32x32x3, que es (ancho, alto, profundidad). La red neuronal debería poder aprender basándose en estos parámetros, ya que la profundidad se traduce en los diferentes canales de las imágenes de entrenamiento.
Entonces DepthConcat concatena tensores a lo largo de la dimensión de profundidad, que es la última dimensión del tensor y, en este caso, la tercera dimensión de un tensor 3D.
DepthConcat necesita hacer que los tensores sean iguales en todas las dimensiones excepto en la dimensión de profundidad, como dice el código de la antorcha :
-- 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.
p.ej
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).
En el diagrama anterior, vemos una imagen del tensor de resultados de DepthConcat, donde el área blanca es el relleno de cero, el rojo es el tensor A y el verde es el tensor B.
Aquí está el pseudocódigo para DepthConcat en este ejemplo:
- Mire el tensor A y el tensor B y encuentre las dimensiones espaciales más grandes, que en este caso serían los tamaños de 16 de ancho y 16 de altura del tensor B. Dado que el tensor A es demasiado pequeño y no coincide con las dimensiones espaciales del Tensor B, deberá rellenarse.
- Rellene las dimensiones espaciales del tensor A con ceros agregando ceros a la primera y segunda dimensiones haciendo el tamaño del tensor A (16, 16, 2).
- Concatenar el tensor A acolchado con el tensor B a lo largo de la dimensión de profundidad (tercera).
Espero que esto ayude a alguien que piense la misma pregunta leyendo ese libro blanco.