9.10.3 EP09_03 🟡 Comptage des paramètres entraînables d’un CNN
Cet EP formalise le comptage des paramètres entraînables d’un CNN. Étant donné la description textuelle d’une petite architecture, composée de couches convolutives, de pooling et entièrement connectées, déterminez, pour chaque couche, le nombre de paramètres entraînables et le total du réseau.
L’architecture doit être interprétée séquentiellement : la sortie d’une couche convolutive devient l’entrée de la couche suivante compatible. Ainsi, le nombre de canaux produits par une couche CONV détermine le nombre de canaux d’entrée (cin) de la couche convolutive suivante.
Dans une couche convolutive, il est important de distinguer les canaux d’entrée et les canaux de sortie :
- \(c_{in}\) (channels in) est le nombre de canaux qui entrent dans la couche. Une image en niveaux de gris possède \(c_{in}=1\), alors qu’une image RVB possède \(c_{in}=3\). Dans une couche convolutive intermédiaire,
cinest généralement égal au nombre de canaux produits par la coucheCONVprécédente. - \(c_{out}\) (channels out) est le nombre de canaux produits par la couche. Il est égal au nombre de filtres utilisés. Par conséquent, si une couche possède 16 filtres, elle produit \(c_{out}=16\) canaux.
Par exemple, considérez la séquence :
CONV 3 3 1 8 1
POOL
CONV 3 3 8 16 1
POOL
FC 784 10 1
La première convolution reçoit une image avec un canal et produit 8 canaux. Après le pooling, la seconde convolution reçoit ces 8 canaux et produit 16 canaux. La couche POOL ne modifie pas le nombre de canaux, elle peut seulement réduire les dimensions spatiales. La couche FC reçoit le nombre d’entrées indiqué dans la description elle-même.
Chaque filtre convolutif possède des dimensions
\[ k_h \times k_w \times c_{in}. \]
Ainsi, une couche avec \(c_{out}\) filtres possède
\[ k_h \cdot k_w \cdot c_{in} \cdot c_{out} \]
poids. S’il y a un biais, on ajoute un paramètre pour chaque filtre, totalisant ainsi \(c_{out}\) paramètres supplémentaires.
Le point central de cet exercice est d’observer que la quantité de paramètres d’une couche convolutive ne dépend pas des dimensions spatiales (\(H \times W\)) de la carte de caractéristiques. Cela est dû au partage des poids : le même filtre est réutilisé à différentes positions de l’entrée.
9.10.3.1 📋 Directives d’implémentation
Entrée : Lire l’entier \(L\) (nombre de couches de l’architecture, dans l’ordre où elles sont appliquées).
Couches : Lire \(L\) lignes, chacune décrivant une couche dans l’un des trois formats :
CONV kh kw cin cout bias— couche convolutive avec un kernel \(k_h \times k_w\), \(c_{in}\) canaux d’entrée, \(c_{out}\) canaux de sortie etbias(0 ou 1), indiquant s’il y a un biais par filtre ;POOL— couche de pooling (maximum ou moyen), qui ne possède pas de paramètres entraînables et préserve le nombre de canaux ;FC in out bias— couche entièrement connectée avecinentrées,outsorties etbias(0 ou 1), indiquant s’il y a un biais par neurone.
Cohérence entre les couches
CONV: dans une séquence de couches convolutives, lecind’une couche doit correspondre aucoutde la couche convolutive précédente. Une couchePOOLne modifie pas ce nombre de canaux.Par exemple :
CONV 3 3 1 8 1 POOL CONV 3 3 8 16 1La première
CONVproduit 8 canaux, qui sont reçus par la secondeCONV. Par conséquent, dans la seconde couche,cin=8etcout=16.Paramètres d’une couche
CONV:Chacun des \(c_{out}\) filtres possède \(k_h \cdot k_w \cdot c_{in}\) poids. Par conséquent,
\[ P_{\mathrm{CONV}} = k_h \cdot k_w \cdot c_{in} \cdot c_{out} + c_{out}\cdot\text{bias}. \]
Paramètres d’une couche
FC:\[ P_{\mathrm{FC}} = \text{in}\cdot\text{out} + \text{out}\cdot\text{bias}. \]
Paramètres d’une couche
POOL: toujours \(0\).Total du réseau : additionner les paramètres entraînables de toutes les couches.
Sortie : Pour chaque couche, dans l’ordre de lecture, imprimer
Camada i: P, où \(i\) commence à \(1\) et \(P\) est le nombre de paramètres de cette couche. À la fin, imprimerTotal: T.
9.10.3.2 📐 Exemple pour comprendre cin et cout
Considérez la séquence :
CONV 3 3 1 8 1
POOL
CONV 3 3 8 16 1
Dans la première couche :
cin=1: un canal entre ;cout=8: il existe 8 filtres et, par conséquent, 8 canaux sortent.
Chaque filtre possède
\[ 3\cdot3\cdot1=9 \]
poids. Comme il existe 8 filtres :
\[ 9\cdot8=72 \]
poids. Avec un biais par filtre :
\[ 72+8=80. \]
Dans la seconde couche :
cin=8: les 8 canaux produits par la premièreCONVentrent ;cout=16: il existe 16 filtres et, par conséquent, 16 canaux sortent.
Chaque filtre possède
\[ 3\cdot3\cdot8=72 \]
poids. Comme il existe 16 filtres :
\[ 72\cdot16=1152 \]
poids. Avec 16 biais :
\[ 1152+16=1168. \]
Ainsi, les deux couches possèdent, respectivement, 80 et 1168 paramètres entraînables.
Observez que cout n’est pas \(cin\) multiplié par le nombre de filtres. Le nombre de filtres est exactement cout : chaque filtre combine tous les canaux d’entrée et produit un seul canal de sortie.
9.10.3.3 📌 Contraintes computationnelles
- Indépendance de la dimension spatiale : l’entrée ne fournit pas \(H \times W\). Le comptage d’une couche
CONVdépend uniquement dekh,kw,cinetcout. - Cohérence des canaux : pour deux couches
CONVconsécutives, lecinde la seconde doit être égal aucoutde la première. Une couchePOOLpréserve le nombre de canaux. biastoujours 0 ou 1 : multiplier directement le terme de biais par cette valeur.- Couches
POOLsans arguments supplémentaires : la ligne contient uniquement le motPOOL. - Couches
FC: le nombre d’entréesinest fourni explicitement. Il n’est pas nécessaire de calculer les dimensions spatiales produites par les couches précédentes. - Toutes les valeurs numériques d’entrée sont des entiers non négatifs.
9.10.3.4 🧠 Fondement théorique
| Élément | Rôle dans le comptage des paramètres |
|---|---|
| \(c_{in}\) | Nombre de canaux reçus par la couche |
| \(c_{out}\) | Nombre de filtres et, par conséquent, de canaux produits par la couche |
| Filtre convolutif | Chaque filtre possède \(k_h \cdot k_w \cdot c_{in}\) poids et produit un canal de sortie |
| Partage des poids | Le même filtre est réutilisé à différentes positions de l’entrée, rendant le comptage indépendant de \(H \times W\) |
| Biais | Un seul paramètre supplémentaire par filtre (CONV) ou par neurone (FC) |
| Pooling | Peut modifier \(H \times W\), mais ne possède pas de paramètres entraînables et préserve le nombre de canaux |
Couche FC |
Possède un poids pour chaque combinaison entre entrée et neurone de sortie |
9.10.3.5 🧩 Méthodes de morph.py pouvant aider
Cet exercice est purement arithmétique et n’utilise pas directement les fonctions de morph.py. Le comptage peut, cependant, être vérifié sur une architecture réelle implémentée en PyTorch via :
sum(p.numel() for p in modelo.parameters())Cette expression comptabilise les paramètres du modèle, y compris les poids et les biais.
9.10.3.6 📦 Spécification d’entrée et de sortie (VPL)
Entrée :
- Ligne 1 : Entier \(L\).
- \(L\) lignes suivantes : description de chaque couche, au format
CONV kh kw cin cout bias,POOLouFC in out bias.
Sortie :
- \(L\) lignes au format
Camada i: P. - Dernière ligne :
Total: T.
9.10.3.7 📌 Exemples
| Entrée | Sortie | Observation |
|---|---|---|
| 3 CONV 3 3 1 8 1 POOL FC 1352 10 1 |
Camada 1: 80 Camada 2: 0 Camada 3: 13530 Total: 13610 |
Réseau simple avec une convolution, pooling et couche de classification. |
| 5 CONV 3 3 1 8 1 POOL CONV 3 3 8 16 1 POOL FC 400 10 1 |
Camada 1: 80 Camada 2: 0 Camada 3: 1168 Camada 4: 0 Camada 5: 4010 Total: 5258 |
Petit CNN avec deux convolutions, deux poolings et une couche entièrement connectée. |
| 6 CONV 3 3 1 8 1 POOL CONV 3 3 8 16 1 POOL FC 256 32 1 FC 32 10 1 |
Camada 1: 80 Camada 2: 0 Camada 3: 1168 Camada 4: 0 Camada 5: 8224 Camada 6: 330 Total: 9802 |
Petit CNN avec deux convolutions, pooling intermédiaire et deux couches entièrement connectées pour la classification. |
%%writefile EP09_03.py
# Code PythonOverwriting EP09_03.py
TestSuite("EP09_03.py").run()✔️ EP09_03.cases existe déjà dans casos/
📋 3 cas chargé(s) depuis casos/EP09_03.cases
🔍 Test de Python : EP09_03.py
⚠️ EP09_03.py : fichier vide (moins de 3 lignes). Tests ignorés.