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?
Réponses:
De la note de Stanfords sur NN:
réf: http://cs231n.github.io/convolutional-networks/
Ces notes accompagnent la classe CS de Stanford CS231n: Réseaux neuronaux convolutionnels pour la reconnaissance visuelle. Pour des questions / préoccupations / rapports de bugs concernant contacter Justin Johnson concernant les affectations, ou contacter Andrej Karpathy concernant les notes de cours
la source
Ce document est vraiment déroutant. Tout d'abord, la taille d'entrée des images est incorrecte 224x224 ne donne pas une sortie de 55. Ces neurones sont simplement comme des pixels groupés en un, donc la sortie est une image 2D de valeurs aléatoires (valeurs de neurones). Donc, fondamentalement, le nombre de neurones = widthxheightxdepth, aucun secret n'est là pour comprendre cela.
la source