Le dictionnaire `parametres` : un sac etiquete pour W1, b1, W2, b2

Idée

Au lieu de quatre variables baladeuses, on range les poids et biais des deux couches dans un sac etiquete que l'on passe d'une fonction a l'autre.

Outil

En physique MPSI : regrouper (m, k, l_0) dans un tuple plutot que trainer trois symboles dans chaque équation.

Formule

Trois entiers : ne = nb d'entrées ($n_0$), nc = nb de neurones de la couche cachée ($n_1$), ns = nb de neurones de sortie ($n_2$). Tirage gaussien standard via torch.randn : $W_1 \in \mathbb{R}^{n_1 \times n_0}$, $b_1 \in \mathbb{R}^{n_1 \times 1}$, $W_2 \in \mathbb{R}^{n_2 \times n_1}$, $b_2 \in \mathbb{R}^{n_2 \times 1}$. Pour XOR : ne=2, nc=2, ns=1, donc $W_1$ est 2x2, $b_1$ est 2x1, $W_2$ est 1x2, $b_2$ est 1x1. La graine torch.manual_seed(0) rend l'initialisation reproductible.

Piège

Si W1 est un tenseur Pytorch requires_grad=True, faire parametres['W1'] = parametres['W1'] - lr * grad crée un nouveau tenseur (perd le requires_grad ou casse le graphe). Il faut soit .data -= (en place) soit utiliser optimizer.step(). Confondre les deux casse l'apprentissage Pytorch silencieusement.