Comment initialiser les poids et biais (weight et bias) dans PyTorch ?
La librairie PyTorch est utilisée pour créer des programmes d'apprentissage automatique en langage Python. Elle fournit tous les outils afin que vous puissiez créer votre programme d'apprentissage et vous accompagne dans la mise en production de celui-ci. La notion de poids synaptique est une des notions importantes dans ce domaine. La librairie vous permet de la définir. La méthode varie selon le nombre de couches de votre réseau neuronal.
Si vous utilisez un réseau neuronal simple avec une seule couche, vous pouvez définir le poids au moment de la création de votre graphique. Le module "torch.nm.init", qui permet de construire les structures de la librairie, accepte entre autres paramètres le poids synaptique. Une autre solution possible est de modifier directement la propriété "weight.data". Cela ne fonctionne que si l'objet que vous manipulez est de la classe "Torch.sensor". La méthode "fill()" prend alors en paramètre le poids synaptique. L'avantage de cette notation est qu'elle fonctionne également pour les biais.
conv1 = torch.nn.Conv2d(...) //Avec "torch.nn.init" torch.nn.init.xavier_uniform(conv1.weight) // Avec "weitgh.data.fill() conv1.weight.data.fill_(0.01)
Si votre réseau neuronal utilise plusieurs couches, vous pouvez stocker le code précédent dans une fonction. Utilisez ensuite la méthode "apply()" de la classe "nn.Sequential". Vous pouvez également le faire avec une autre classe dérivée de la classe "nn.Module". Cette fonction va appliquer la fonction en paramètre à l'ensemble des sous-modules de votre module. Toutes les couches auront donc le poids initialisé.
def set_poids(m): if type(m) == nn.Linear: torch.nn.init.xavier_uniform(m.weight) m.bias.data.fill_(0.01) net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2)) net.apply(init_weights)