[PYTHON] Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur

1.Tout d'abord

Je me suis demandé comment compter les paramètres du deep learning, alors je l'ai calculé pour confirmer ma compréhension.

2. Configuration du modèle

Configurons le modèle à l'aide de Keras. Le modèle créé cette fois sera un modèle qui prend une image RBG 256x256 comme entrée et la classe en 9 catégories.

スクリーンショット 2020-03-15 15.13.37.png

la mise en oeuvre

Importez les modules requis.

from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten, Dropout
from keras.layers.core import Dense

Définir le nombre de classes à classer comme constante

num_class = 9

Configurez le modèle.

#Créer un modèle
model = Sequential()

model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.5))

model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())    #Flatten()Convertir la carte des caractéristiques en vecteur par
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_class, activation='softmax'))    #Sortie en 9 classes de précision avec fonction Softmax

Produit des informations sur le modèle.

model.summary()        #Afficher les informations du modèle

Vous obtiendrez la sortie suivante: Le nombre de paramètres est affiché à l'extrême droite de celui-ci. Dans ce modèle, 6 029 097 paramètres seront ajustés par formation.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 256, 256, 32)      896       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 254, 254, 32)      9248      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 84, 84, 32)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 84, 84, 32)        9248      
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 82, 82, 32)        9248      
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32)        0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 41, 41, 32)        0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 41, 41, 32)        9248      
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 39, 39, 32)        9248      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32)        0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 19, 19, 32)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 11552)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 512)               5915136   
_________________________________________________________________
dropout_4 (Dropout)          (None, 512)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 128)               65664     
_________________________________________________________________
dropout_5 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_3 (Dense)              (None, 9)                 1161      
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________

3. Calcul du nombre de paramètres

3-1. Couche CNN

Tout d'abord, examinons la couche CNN de la première couche. Le nombre de filtres: 32, taille de filtre: 3x3, canal d'entrée: 3 (RVB), canal de sortie: 3 sont spécifiés.

model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_1 (Conv2D)            (None, 256, 256, 32)      896       
_________________________________________________________________

Le nombre de paramètres peut être calculé par la formule suivante. Nombre de paramètres = Taille verticale du filtre x Taille horizontale du filtre x Nombre de canaux d'entrée x Nombre de canaux de sortie + Biais x Nombre de canaux de sortie param =3 x 3 x 3 x 32 + 1 x 32 = 896

Calculons la deuxième couche de la même manière.

model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_2 (Conv2D)            (None, 254, 254, 32)      9248      
_________________________________________________________________

Cette fois, l'entrée de la deuxième couche est de 32 canaux, donc

Nombre de paramètres = Taille verticale du filtre x Taille horizontale du filtre x Nombre de canaux d'entrée x Nombre de canaux de sortie + Biais x Nombre de canaux de sortie param =3 x 3 x 32 x 32 + 1 x 32 = 9248

Les 3e, 4e, 5e et 6e couches Conv2D peuvent être calculées de la même manière.

3-2. Aplatir la couche

La carte des caractéristiques est vectorisée. Il est ramené à une dimension. Ce n'est pas un paramètre ajusté en apprenant ici,

_________________________________________________________________
dropout_3 (Dropout)          (None, 19, 19, 32)        0         
_________________________________________________________________

La dimension du vecteur est 19 x 19 x 32 = 11552.

3-3. Couche dense (couche cachée)

Dans la couche Dense à côté de la couche Aplatir qui vectorise les entités Parce que le nombre de paramètres = taille d'entrée x taille de sortie + biais param = 11552 x 512 + 512 = 5915136

Le prochain calque caché est le même dense_2 (Dense) param = 512 x 128 + 512 = 65664 dense_3 (Dense) param = 128 x 9 + 9 = 1161

4. Résumé

Vérifiez à nouveau le modèle que vous avez construit. Si vous ajoutez la valeur de Param à l'extrême droite, elle devient 6 029 097. Ce paramètre a été ajusté en entraînement. Ensuite, les paramètres ajustés par apprentissage deviennent une partie du modèle, et en déduction, ces paramètres sont utilisés et calculés à moins que le modèle ne soit allégé.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 256, 256, 32)      896       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 254, 254, 32)      9248      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 84, 84, 32)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 84, 84, 32)        9248      
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 82, 82, 32)        9248      
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32)        0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 41, 41, 32)        0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 41, 41, 32)        9248      
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 39, 39, 32)        9248      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32)        0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 19, 19, 32)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 11552)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 512)               5915136   
_________________________________________________________________
dropout_4 (Dropout)          (None, 512)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 128)               65664     
_________________________________________________________________
dropout_5 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_3 (Dense)              (None, 9)                 1161      
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________

Recommended Posts

Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Graphique de l'historique du nombre de couches de deep learning et du changement de précision
Comptez le nombre de caractères dans le texte dans le presse-papiers sur Mac
[Homologie] Comptez le nombre de trous dans les données avec Python
Comptez bien le nombre de caractères thaïlandais et arabes en Python
Compter / vérifier le nombre d'appels de méthode.
Othello-De la troisième ligne de "Implementation Deep Learning" (3)
Signification des modèles et paramètres d'apprentissage en profondeur
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Visualisez les effets de l'apprentissage profond / de la régularisation
Compter le nombre de caractères avec écho
Othello-De la troisième ligne de "Implementation Deep Learning" (2)
L'histoire de l'apprentissage profond avec TPU
Trouvez le nombre de jours dans un mois
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Deep learning 1 Pratique du deep learning
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment installer le framework d'apprentissage en profondeur Tensorflow 1.0 dans l'environnement Windows Anaconda
Spécifier le modèle d'éclairage du matériau SCN dans Pythonista
Comment obtenir le nombre de chiffres en Python
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Obtenir la taille (nombre d'éléments) de Union Find en Python
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
Examinez les paramètres de RandomForestClassifier dans le didacticiel Kaggle / Titanic
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
10. Compter le nombre de lignes
Deep running 2 Réglage de l'apprentissage profond
Obtenez le nombre de chiffres
Calculez le nombre de changements
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Comment trouver le nombre optimal de clusters pour les k-moyennes
Maya | Découvrez le nombre de polygones dans l'objet sélectionné
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Examiner la plage d'erreur dans le nombre de décès dus à la pneumonie
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Enquête sur l'utilisation du machine learning dans les services réels
Obtenez le nombre d'éléments spécifiques dans la liste python
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Python --Trouvez le nombre de groupes dans l'expression regex
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Obtenez le nombre d'occurrences pour chaque élément de la liste
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
Distillateur de bibliothèque d'éclaircissement de modèles d'apprentissage profond
[Pytorch] Je souhaite attribuer manuellement les paramètres d'entraînement du modèle
Obtenez le nombre de vues de Qiita
L'histoire de la participation à AtCoder
Défis de Coursera Machine Learning en Python: ex5 (ajustement des paramètres de régularisation)
[Python] Réduisons le nombre d'éléments dans le résultat dans le fonctionnement de l'ensemble
Échappement automatique des paramètres MySQL en python
Calcul du nombre d'associations de Klamer
Simulation Python du modèle épidémique (modèle Kermack-McKendrick)
Essayez de modéliser le rendement cumulatif du roulement dans le trading à terme
L'histoire du "trou" dans le fichier
Classification en temps réel de plusieurs objets dans les images de la caméra avec apprentissage en profondeur de Raspberry Pi 3 B + et PyTorch
Obtenez le nombre d'abonnés Youtube
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance