Maison >Problème commun >Explication détaillée de la structure du réseau Alexnet
La première couche de convolution 1, le nombre de noyaux de convolution est de 96 ; la deuxième couche de convolution 2, le nombre de convolutions est de 256 ; l'entrée est la sortie de la deuxième couche, le nombre de noyaux de convolution ; est 384 ; la quatrième couche de convolution est 4, l'entrée est la sortie de la troisième couche et le nombre de noyaux de convolution est 384 ; la cinquième couche de convolution est 5, l'entrée est la sortie de la quatrième couche et le le nombre de noyaux de convolution est Le nombre est 256.
L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.
Le réseau AlexNet a été conçu par Hinton, champion du concours ImageNet 2012, et son élève Alex Krizhevsky. Après cette année, des réseaux de neurones de plus en plus profonds ont été proposés, comme les excellents vgg et GoogleLeNet. La précision de son modèle de données officiellement fourni atteint 57,1 % et celle du top 1 à 5 atteint 80,2 %. C'est déjà tout à fait remarquable pour les algorithmes de classification d'apprentissage automatique traditionnels. L'image montre la structure du réseau d'Alexnet dans Caffe, en utilisant deux serveurs GPU, vous verrez donc deux organigrammes. Le modèle de réseau AlexNet est interprété comme suit :
est interprété comme suit :
第一层:卷积层1,输入为 224×224×3 224 \times 224 \times 3224×224×3的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×3 11 \times 11 \times 311×11×3; stride = 4, stride表示的是步长, pad = 0, 表示不扩充边缘;卷积后的图形大小是怎样的呢? wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54height = (224 + 2 * padding - kernel_size) / stride + 1 = 54dimention = 96然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map最终第一层卷积的输出为 第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×48 5 \times 5 \times 485×5×48; pad = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3), stride = 2; 第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3×3×256 3 \times 3 \times 2563×3×256), padding = 1, 第三层没有做LRN和Pool 第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3 3 \times 33×3), padding = 1, 和第三层一样,没有LRN和Pool 第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3×3 3 \times 33×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。Utilisez le propre outil de dessin de caffe (caffe/python/draw_net.py) et train_val sous le répertoire caffe/models/bvlc_alexnet/ . Le diagramme de structure du réseau dessiné par prototxt est le suivant :
python3 draw_net.py --rankdir TB ../models/bvlc_alexnet/train_val.prototxt AlexNet_structure.jpgPoints d'innovation de l'algorithme (1) Utilisation réussie de ReLU comme fonction d'activation de CNN et vérification que son effet dépassait Sigmoid dans les réseaux plus profonds, avec succès. résoudre le problème de dispersion du gradient du sigmoïde lorsque le réseau est profond. Bien que la fonction d’activation ReLU ait été proposée il y a longtemps, il a fallu attendre l’émergence d’AlexNet pour qu’elle soit reconduite. (2) Utilisez Dropout pour ignorer au hasard certains neurones pendant l'entraînement afin d'éviter un surajustement du modèle. Bien que Dropout ait été discuté dans un article séparé, AlexNet l'a rendu pratique et a confirmé son effet par la pratique. Dans AlexNet, Dropout est principalement utilisé dans les dernières couches entièrement connectées. (3) Utilisez la mise en commun maximale qui se chevauche dans CNN. Auparavant, le pooling moyen était couramment utilisé sur CNN, et AlexNet utilisait tous le pooling maximum pour éviter l'effet de flou du pooling moyen. De plus, AlexNet propose que la longueur du pas soit inférieure à la taille du noyau de pooling, de sorte qu'il y ait un chevauchement et une couverture entre les sorties de la couche de pooling, ce qui améliore la richesse des fonctionnalités.
(4) a proposé la couche LRN pour créer un mécanisme de compétition pour l'activité des neurones locaux, rendant la valeur avec une réponse plus grande relativement plus grande et inhibant d'autres neurones avec un feedback plus petit, améliorant ainsi la capacité de généralisation du modèle.
(5) La formation multi-GPU peut augmenter l'échelle de la formation réseau. (6) Entrée d'images de données ImageNet à un million de niveaux. Il existe trois méthodes d'augmentation des données utilisées dans AlexNet :
Transformation (recadrage) ; Transformation de réflexion (retournement) ;
Transformation de l'éclairage et des couleurs (instabilité des couleurs) : effectuez d'abord une traduction aléatoire sur l'image, puis retournez-la horizontalement. Lors du test, effectuez d'abord 5 transformations de traduction en haut à gauche, en haut à droite, en bas à gauche. en bas à droite et au milieu, puis après le retournement, faites la moyenne des résultats
peut être résumé comme suit :
Utilisez l'augmentation des données pour ; améliorer l'ensemble de données (augmentation des données)
Retournement horizontal des images, recadrage aléatoire, transformation de traduction, transformation de couleur, transformation d'éclairage, etc. Utilisez plusieurs GPU pour la formation Divisez les résultats ; de la couche supérieure en 2 parties en fonction de la dimension du canal et envoyez-les respectivement à 2 GPU, comme la couche de 27 × 27 × 96 pixels sortie par la couche précédente (divisée en deux groupes de couches de 27 × 27 × 48 pixels et placée dans deux GPU différents pour le fonctionnement);Préparez l'ensemble de données, modifiez le train.prototxt du réseau Alexnet, configurez le solveur, déployez le fichier.prototxt, créez un nouveau script train.sh et démarrez la formation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!