Dans Alex Krizhevsky, et al. Classification Imagenet avec des réseaux de neurones convolutionnels profonds, ils énumèrent le nombre de neurones dans chaque couche (voir schéma ci-dessous).
L'entrée du réseau est de 150528 dimensions et le nombre de neurones dans les couches restantes du réseau est donné par 253,440–186,624–64,896–64,896–43,264– 4096–4096–1000.
Une vue 3D
Le nombre de neurones pour toutes les couches après la première est clair. Une façon simple de calculer les neurones consiste à simplement multiplier les trois dimensions de cette couche ( planes X width X height
):
- Couche 2:
27x27x128 * 2 = 186,624
- Couche 3:
13x13x192 * 2 = 64,896
- etc.
Cependant, en regardant la première couche:
- Couche 1:
55x55x48 * 2 = 290400
Notez que ce n'est pas 253,440
comme spécifié dans le document!
Calculer la taille de sortie
L'autre façon de calculer le tenseur de sortie d'une convolution est:
Si l'image d'entrée est un tenseur 3D
nInputPlane x height x width
, la taille de l'image de sortie sera cellenOutputPlane x owidth x oheight
où
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1
.
(à partir de la documentation de Torch SpatialConvolution )
L'image d'entrée est:
nInputPlane = 3
height = 224
width = 224
Et la couche de convolution est:
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(par exemple taille du noyau 11
, foulée 4
)
En insérant ces chiffres, nous obtenons:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Nous sommes donc à court des 55x55
dimensions dont nous avons besoin pour correspondre au papier. Il peut s'agir d'un remplissage (mais le cuda-convnet2
modèle définit explicitement le remplissage à 0)
Si nous prenons les 54
dimensions -taille, nous obtenons des 96x54x54 = 279,936
neurones - encore trop.
Voici donc ma question:
Comment obtiennent-ils 253 440 neurones pour la première couche convolutionnelle? Qu'est-ce que je rate?