Je me suis demandé comment compter les paramètres du deep learning, alors je l'ai calculé pour confirmer ma compréhension.
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.
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
_________________________________________________________________
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.
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.
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
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