[PYTHON] [Apprentissage en profondeur] Découvrez comment utiliser chaque fonction du réseau neuronal convolutif [DW jour 3]

Qu'est-ce que le réseau neuronal convolutif (CNN)?

Un réseau neuronal spécialisé pour les images. Alors qu'un perceptron multicouche normal se compose d'une couche d'entrée, d'une couche intermédiaire et d'une couche de sortie, le CNN a également une couche de convolution, une couche de regroupement et une couche localement normalisée (couche LRN).

En regardant AlexNet (haut de ILSVRC2012) dans l'exemple Chainer, cela ressemble à ceci:

# … (Omis)
class AlexBN(chainer.Chain):

   """Single-GPU AlexNet with LRN layers replaced by BatchNormalization."""

   insize = 227

   def __init__(self):
       super(AlexBN, self).__init__(
           conv1=L.Convolution2D(3,  96, 11, stride=4),
           bn1=L.BatchNormalization(96),
           conv2=L.Convolution2D(96, 256,  5, pad=2),
           bn2=L.BatchNormalization(256),
           conv3=L.Convolution2D(256, 384,  3, pad=1),
           conv4=L.Convolution2D(384, 384,  3, pad=1),
           conv5=L.Convolution2D(384, 256,  3, pad=1),
           fc6=L.Linear(9216, 4096),
           fc7=L.Linear(4096, 4096),
           fc8=L.Linear(4096, 1000),
       )
       self.train = True

# … (Omis)

Il se compose de 5 couches convolutives et de 3 couches entièrement connectées. Le document indique également que les fonctions d'activation ReLu, multi-GPU, LRN et la mise en commun sont importantes. L'exemple de chaînage ci-dessus utilise la normalisation par lots au lieu de LRN. Ce qui suit est détaillé sur la normalisation des lots.

Couche pliante

L.Convolution2D(3,  96, 11, stride=4)

La formule de pliage est omise car elle est écrite dans divers ouvrages de référence. Ici, nous visons à pouvoir utiliser cette fonction. Premièrement, la convolution consiste à filtrer et à convertir une image. Comme l'image, le filtre a des variables telles que le nombre de pixels et le canal. Lorsque le nombre de pixels de l'image est $ N \ fois N $ et le nombre de canaux est $ K $, la taille du filtre est également $ H \ fois H , tout comme la taille de l'image s'écrit $ N \ fois N \ fois K $. Écrivez comme des temps K $. Le nombre de canaux d'image et de filtre sera le même. Il peut y avoir plusieurs types de filtres appliqués à l'image. Lorsque vous appliquez le filtre de type $ M $, le nombre de canaux dans l'image de sortie est converti en $ M $. De plus, lors de l'application d'un filtre, le filtre est partiellement appliqué lors du déplacement, et la largeur du mouvement est appelée largeur de foulée. L'augmentation de la largeur de foulée permet de rater plus facilement les caractéristiques de l'image, donc une largeur de foulée plus petite est souhaitable. En outre, fournir des pixels virtuels à l'extérieur du bord de l'image est appelé remplissage. En donnant un rembourrage, il est possible de supprimer la réduction de l'image lorsqu'elle est pliée. Si vous voulez qu'elle ait la même taille que l'entrée, tronquez la taille de remplissage à $ H / 2 $. Pour résumer jusqu'ici, l'argument de pythonL.Convolution2D () est

--Premier argument = nombre de canaux d'entrée. C'est $ K $. --Deuxième argument = nombre de canaux de sortie. $ M $.

Sera. Il n'y a pas de spécification concernant le nombre de pixels dans l'image d'entrée / sortie.

Normalisation par lots

L.BatchNormalization(96)

L'argument est le nombre de canaux de l'image à normaliser. Ce sera le même que le nombre de canaux de sortie de la convolution précédente ($ M $).

Couche de regroupement

 h = self.bn1(self.conv1(x), test=not self.train)
 h = F.max_pooling_2d(F.relu(h), 3, stride=2)

Le regroupement est effectué après la saisie du résultat de la couche de convolution dans ReLu. Le regroupement prête attention à une certaine zone comme un filtre et génère une valeur représentative de cette zone selon une certaine règle. En conséquence, une invariance de position peut être obtenue. Il existe de nombreuses variantes de mise en commun.

--Mise en commun moyenne: prenez la moyenne des valeurs de la zone --Mise en commun maximale: prenez le maximum de la zone

AlexNet utilise une mise en commun maximale.

Résumant les arguments de F.max_pool_2d (),

--Premier argument: Image d'entrée --Deuxième argument: taille de la zone de regroupement. Si la zone est trop grande, la précision diminuera.

Là encore, le nombre de pixels d'entrée / sortie n'est pas spécifié.

J'ai essayé d'utiliser AlexNet

Dans le prochain article (par écrit), j'écrirai le résultat de l'utilisation d'AlexNet.

Recommended Posts

[Apprentissage en profondeur] Découvrez comment utiliser chaque fonction du réseau neuronal convolutif [DW jour 3]
[Apprentissage en profondeur] Classification d'images avec un réseau neuronal convolutif [DW jour 4]
Comment utiliser la fonction zip
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
[Deep Learning from scratch] Valeur initiale du poids du réseau neuronal utilisant la fonction sigmoïde
Comment installer le framework d'apprentissage en profondeur Tensorflow 1.0 dans l'environnement Windows Anaconda
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Comment frapper le document de Magic Function (Line Magic)
[Deep Learning from scratch] Poids initial du réseau neuronal lors de l'utilisation de la fonction Relu
[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Comment utiliser le générateur
Chapitre 3 Réseau de neurones Ne découpez que les bons points de Deeplearning à partir de zéro
Comment exécuter automatiquement la fonction d'exportation de GCP Datastore
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
Comment utiliser le décorateur
[Deep Learning from scratch] À propos des couches requises pour implémenter le traitement de rétropropagation dans un réseau neuronal
[EC2] Comment installer Chrome et le contenu de chaque commande
[Python] Explique comment utiliser la fonction format avec un exemple
Comment utiliser Jupyter sur le frontal de Spacon ITO
Comment utiliser la fonction de rendu définie dans .mako (.html) directement dans mako
[NNabla] Comment supprimer le niveau intermédiaire d'un réseau prédéfini
Comprendre le nombre de paramètres d'entrée / sortie du réseau neuronal convolutif
Comment utiliser le module optparse
Résumé de l'utilisation de pandas.DataFrame.loc
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Résumé de l'utilisation de pyenv-virtualenv
Touchez l'objet du réseau neuronal
Comment utiliser la fonction zip de python
Étudiez en profondeur le Deep Learning [DW Day 0]
Résumé de l'utilisation de csvkit
Comment utiliser le module ConfigParser
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (deuxième moitié)
[Python] Comment rendre le nom de fichier des données de sortie unique (utiliser l'année, le mois, le jour, l'heure, la seconde)
Comment étudier pour le test G de Deep Learning Association (pour les débutants) [version 2020]
Fiche d'apprentissage (4e jour) #Comment obtenir le chemin absolu à partir du chemin relatif
[Python] Explique comment utiliser la fonction range avec un exemple concret
Comment utiliser l'apprentissage automatique pour le travail? 02_Aperçu du projet de développement AI
Comment utiliser la bibliothèque "torchdiffeq" qui implémente le bloc ODE de Neural ODE
[Python] Comment utiliser la fonction enumerate (extraire le numéro d'index et l'élément)
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
[Langage C] Comment utiliser la fonction crypt sous Linux [Hachage de mot de passe]
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
[Python] Résumé de l'utilisation des pandas
Comment utiliser le pipeline Spark ML
Comment utiliser le réseau de développeurs cybozu.com (partie 2)
scikit-learn Comment utiliser le résumé (apprentissage automatique)
Comment vérifier la version de Django
Othello-De la troisième ligne de "Implementation Deep Learning" (3)
Implémentation d'un réseau neuronal à 3 couches (pas d'apprentissage)
[python] Comment utiliser __command__, explication des fonctions
[Linux] Comment utiliser la commande echo
Comment calculer Utiliser% de la commande df
Comment étudier le test Deep Learning G
Visualisez les effets de l'apprentissage profond / de la régularisation
[Python2.7] Résumé de l'utilisation d'unittest