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.