Eu tinha a mesma pergunta em mente ao ler esse white paper e os recursos que você mencionou me ajudaram a criar uma implementação.
No código da tocha que você referenciou , ele diz:
--[[ 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 :
A palavra "profundidade" no aprendizado profundo é um pouco ambígua. Felizmente, esta resposta SO fornece alguma clareza:
Nas redes neurais profundas, a profundidade refere-se à profundidade da rede, mas, neste contexto, a profundidade é usada para reconhecimento visual e se traduz na terceira dimensão de uma imagem.
Nesse caso, você tem uma imagem e o tamanho dessa entrada é 32x32x3, que é (largura, altura, profundidade). A rede neural deve ser capaz de aprender com base nesses parâmetros, à medida que a profundidade se traduz nos diferentes canais das imagens de treinamento.
Portanto, o DepthConcat concatena os tensores ao longo da dimensão de profundidade, que é a última dimensão do tensor e, neste caso, a 3ª dimensão de um tensor 3D.
O DepthConcat precisa tornar os tensores iguais em todas as dimensões, exceto na dimensão de profundidade, como diz o código da tocha :
-- 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.
por exemplo
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).
No diagrama acima, vemos uma imagem do tensor de resultado DepthConcat, onde a área branca é o preenchimento zero, o vermelho é o tensor A e o verde é o tensor B.
Aqui está o pseudo-código para DepthConcat neste exemplo:
- Observe o tensor A e o tensor B e encontre as maiores dimensões espaciais, que neste caso seriam as 16 larguras e 16 alturas do tensor B. Como o tensor A é muito pequeno e não corresponde às dimensões espaciais do tensor B, ele precisará ser preenchido.
- Preencher as dimensões espaciais do tensor A com zeros adicionando zeros às primeira e segunda dimensões, tornando o tamanho do tensor A (16, 16, 2).
- Concatene o tensor acolchoado A com o tensor B ao longo da dimensão de profundidade (3ª).
Espero que isso ajude alguém que pensa a mesma pergunta a ler esse white paper.