Explication
Un CNN (réseau à convolution) glisse des petits filtres sur une image pour détecter des motifs : bords, coins, textures. Les filtres ne sont pas écrits à la main - le réseau les apprend.
📖 Vocabulaire - français / anglais
- CNN ↔ *Convolutional Neural Network* (réseau de neurones à convolution)
- filtre / noyau ↔ *filter / kernel*
- convolution ↔ *convolution* (glisser le filtre sur l'image)
Exercice 4.1 - Le filtre à la main
✍️ À toi de jouer
Avant PyTorch, comprends ce qu'est un filtre. Calcule d'abord le résultat en position (0,0) à la main, puis vérifie avec le code.
import numpy as np
image = np.array([ # un bord vertical au milieu
[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
])
filtre = np.array([ # détecteur de bords verticaux
[-1, 0, 1],
[-1, 0, 1],
[-1, 0, 1],
])
resultat = np.zeros((3, 3))
for i in range(3):
for j in range(3):
zone = image[i:i+3, j:j+3]
resultat[i, j] = np.sum(zone * filtre)
print(resultat)
- Pourquoi les bords verticaux ressortent-ils en grandes valeurs ?
- Que donnerait un filtre horizontal
[[-1,-1,-1],[0,0,0],[1,1,1]]?
Voir la réponse
- Le filtre multiplie la colonne de gauche par −1 et celle de droite par +1. Sur un bord vertical, la gauche est noire (0) et la droite blanche (1) → résultat fortement positif. Dans les zones uniformes → proche de 0.
- Un filtre horizontal ferait ressortir les bords horizontaux, et donnerait 0 sur les bords verticaux.
La leçon : un CNN n'est pas magique. Il fait juste ça, mais avec des dizaines de filtres qu'il apprend lui-même. Chaque filtre devient un détecteur : bords, coins, cercles…
Exercice 4.2 - MNIST avec PyTorch
✍️ À toi de jouer
Avec le tutoriel PyTorch de la Phase 6, entraîne un modèle sur MNIST (chiffres manuscrits). Compare deux architectures :
- Dense :
nn.Linear(784, 128)- aplatit l'image en une ligne. - CNN :
nn.Conv2d(1, 32, 3)- utilise des filtres.
Question : laquelle converge plus vite, et pourquoi ?
Voir la réponse
Le CNN converge plus vite et vise plus haut (≈ 95-98 % contre 90-92 % pour le dense).
Pourquoi : le CNN préserve la spatialité - il sait que le pixel (14,14) est voisin de (14,15). Le réseau dense perd cette information en aplatissant l'image en une seule ligne de 784 nombres.