Corrigé du devoir de Deep Learning
Exercice 1 – Convolution 2D, ReLU et MaxPooling
Données de l'énoncé
| Paramètre | Valeur | Signification |
|---|---|---|
| Nombre d'images | ||
| Canaux d'entrée | ||
| Dimensions des images | ||
| Nombre de classes | ||
| Canaux de sortie | ||
| Taille du filtre pour la question 3 |
Question 1 – Dimensions du tenseur de sortie
La convolution possède les paramètres suivants :
- Filtre :
- Stride :
- Padding :
- Canaux de sortie :
La formule de calcul d'une dimension spatiale est :
Application :
Même calcul pour la largeur :
Réponse :
La convolution conserve les dimensions spatiales et transforme les
Question 2 – Nombre de paramètres du filtre
Pour une convolution 2D :
Le
Application :
Réponse :
Soit 144 poids et 8 biais.
Sans biais, le nombre de paramètres est de
Question 3 – Padding pour un filtre
Pour conserver les dimensions spatiales avec un stride de
Avec
Le padding doit donc être asymétrique, car on ne peut pas ajouter
Réponse :
Utiliser un padding de 2 pixels d'un côté et 3 pixels de l'autre, pour chaque dimension.
On peut également utiliser padding="same" dans PyTorch avec un stride de
Question 4 – Intérêt de ReLU par rapport à la sigmoïde
La fonction ReLU est définie par :
La fonction sigmoïde est :
Réponse :
ReLU limite le problème de disparition du gradient (vanishing gradient) pour les valeurs positives, contrairement à la sigmoïde qui sature aux valeurs extrêmes.
ReLU est également plus rapide à calculer et favorise un apprentissage plus efficace des réseaux profonds.
Question 5 – Application du MaxPooling2D
Matrice d'entrée :
Paramètres :
- Fenêtre :
- Stride :
- Padding :
Étape 1 – Calculer la dimension de sortie
Même calcul pour la largeur :
On obtient donc une matrice de dimension :
Étape 2 – Trouver le maximum de chaque fenêtre
Pour chaque fenêtre de taille
| Position | Maximum |
|---|---|
| Haut gauche | |
| Haut droite | |
| Bas gauche | |
| Bas droite |
Le MaxPooling conserve uniquement la plus grande valeur de chaque fenêtre.
Réponse :
Question 6 – MaxPooling pour diviser les dimensions par 2
On cherche à obtenir :
La formule générale est :
On choisit :
- Stride :
- Padding :
Application :
Réponse :
Ces paramètres divisent la hauteur et la largeur par
Exemple en PyTorch :
nn.MaxPool2d(kernel_size=4, stride=2, padding=1)