Em Alex Krizhevsky, et al. Na classificação Imagenet com redes neurais convolucionais profundas, eles enumeram o número de neurônios em cada camada (veja o diagrama abaixo).
A entrada da rede é 150.528-dimensional, e o número de neurônios nas camadas restantes da rede é dado por 253.440-186.624-64.896-64.896–43.264– 4096–4096-1000.
Uma visualização em 3D
O número de neurônios para todas as camadas após a primeira é claro. Uma maneira simples de calcular os neurônios é simplesmente multiplicar as três dimensões dessa camada ( planes X width X height
):
- Camada 2:
27x27x128 * 2 = 186,624
- Camada 3:
13x13x192 * 2 = 64,896
- etc.
No entanto, olhando para a primeira camada:
- Camada 1:
55x55x48 * 2 = 290400
Observe que isso não é o 253,440
especificado no documento!
Calcular tamanho da saída
A outra maneira de calcular o tensor de saída de uma convolução é:
Se a imagem de entrada for um tensor 3D
nInputPlane x height x width
, o tamanho da imagem de saída seránOutputPlane x owidth x oheight
onde
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1
.
(da documentação da Torch SpatialConvolution )
A imagem de entrada é:
nInputPlane = 3
height = 224
width = 224
E a camada de convolução é:
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(por exemplo 11
, tamanho do kernel , passo 4
)
Conectando esses números, obtemos:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Portanto, estamos um pouco abaixo das 55x55
dimensões necessárias para corresponder ao papel. Eles podem estar preenchendo (mas o cuda-convnet2
modelo define explicitamente o preenchimento como 0)
Se tomarmos as 54
dimensões de tamanho, obteremos 96x54x54 = 279,936
neurônios - ainda serão muitos.
Então, minha pergunta é esta:
Como eles conseguem 253.440 neurônios para a primeira camada convolucional? o que estou perdendo?