J'utilise Lasagne pour créer un CNN pour le jeu de données MNIST. Je suis de près cet exemple : Réseaux neuronaux convolutifs et extraction de caractéristiques avec Python .
L'architecture CNN que j'ai pour l'instant, qui n'inclut pas de couches d'exclusion, est la suivante :
NeuralNet(
layers=[('input', layers.InputLayer), # Input Layer
('conv2d1', layers.Conv2DLayer), # Convolutional Layer
('maxpool1', layers.MaxPool2DLayer), # 2D Max Pooling Layer
('conv2d2', layers.Conv2DLayer), # Convolutional Layer
('maxpool2', layers.MaxPool2DLayer), # 2D Max Pooling Layer
('dense', layers.DenseLayer), # Fully connected layer
('output', layers.DenseLayer), # Output Layer
],
# input layer
input_shape=(None, 1, 28, 28),
# layer conv2d1
conv2d1_num_filters=32,
conv2d1_filter_size=(5, 5),
conv2d1_nonlinearity=lasagne.nonlinearities.rectify,
# layer maxpool1
maxpool1_pool_size=(2, 2),
# layer conv2d2
conv2d2_num_filters=32,
conv2d2_filter_size=(3, 3),
conv2d2_nonlinearity=lasagne.nonlinearities.rectify,
# layer maxpool2
maxpool2_pool_size=(2, 2),
# Fully Connected Layer
dense_num_units=256,
dense_nonlinearity=lasagne.nonlinearities.rectify,
# output Layer
output_nonlinearity=lasagne.nonlinearities.softmax,
output_num_units=10,
# optimization method params
update= momentum,
update_learning_rate=0.01,
update_momentum=0.9,
max_epochs=10,
verbose=1,
)
Cela produit les informations suivantes sur les couches :
# name size
--- -------- --------
0 input 1x28x28
1 conv2d1 32x24x24
2 maxpool1 32x12x12
3 conv2d2 32x10x10
4 maxpool2 32x5x5
5 dense 256
6 output 10
et sort le nombre de paramètres apprenables comme 217,706
Je me demande comment ce chiffre est calculé. J'ai lu un certain nombre de ressources, dont celle de StackOverflow. question mais aucun ne généralise clairement le calcul.
Si possible, le calcul des paramètres apprenables par couche peut-il être généralisé ?
Par exemple, couche convolutive : nombre de filtres x largeur du filtre x hauteur du filtre.