Comment initialiser les poids dans PyTorch?
Comment initialiser les poids et les biais (par exemple, avec Il ou Xavier initialisation) dans un réseau de PyTorch?
Vous devez vous connecter pour publier un commentaire.
Comment initialiser les poids et les biais (par exemple, avec Il ou Xavier initialisation) dans un réseau de PyTorch?
Vous devez vous connecter pour publier un commentaire.
Seule couche
Pour initialiser le poids d'une seule couche, utilisez une fonction de
de la torche.nn.init
. Par exemple:Alternativement, vous pouvez modifier les paramètres par écrit à
conv1.weight.data
(qui est unde la torche.Tenseur
). Exemple:La même chose s'applique pour les préjugés:
nn.Sequential
ou personnalisénn.Module
Passer d'une fonction d'initialisation pour
de la torche.nn.Le Module.appliquer
. Il va initialiser les poids dans l'ensemble de lann.Module
de manière récursive.Exemple:
reset_parameters
méthode dans le code source de plusieurs modules. Dois-je remplacer la méthode du poids de l'initialisation?Nous comparer les différents mode de poids-initialisation en utilisant le même réseau neuronal(NN) l'architecture.
Tous les Zéros ou
Si vous suivez le principe de Le rasoir d'Occam, vous pourriez penser que le réglage de tous les poids à 0 ou 1 ce serait la meilleure solution. Ce n'est pas le cas.
Avec tous les poids les mêmes, tous les neurones dans chaque couche sont de produire le même résultat. Cela rend difficile de décider à laquelle le poids de l'ajuster.
Initialisation Uniforme
Un distribution uniforme a la même probabilité de choisir n'importe quel nombre d'un ensemble de nombres.
Nous allons voir comment bien le réseau de neurones trains à l'aide d'un poids uniforme de l'initialisation, où
low=0.0
ethigh=1.0
.Ci-dessous, nous allons voir d'une autre façon (d'ailleurs dans la classe de Net code) pour initialiser les poids d'un réseau. Pour définir le poids en dehors de la définition du modèle, nous pouvons:
Règle générale pour le réglage de poids
La règle générale pour le réglage du poids dans un réseau de neurones est de s'être proche de zéro sans être trop petit.
ci-dessous, nous comparons les performances de NN, poids initialisé avec une distribution uniforme [-0.5,0.5) par rapport à celle dont le poids est initialisé à l'aide de règle générale
distribution normale pour initialiser les poids
ci-dessous, nous montrons les performances de deux NN une initialisé à l'aide de uniforme-distribution et l'autre à l'aide de normale de distribution
Désolé d'être si en retard, j'espère que ma réponse vous aidera.
D'initialiser les poids avec un
normal distribution
utilisation:Ou l'utilisation d'un
constant distribution
écrire:Ou pour utiliser une
uniform distribution
:Vous pouvez consulter d'autres méthodes pour initialiser les tenseurs ici
Si vous voyez un warning de dépréciation (@Fábio Perez)...
Pour initialiser les couches généralement, vous n'avez pas besoin de faire quoi que ce soit.
PyTorch va le faire pour vous. Si vous pensez à ce sujet, cela a beaucoup de sens. Pourquoi devrions-nous initialiser couches, quand PyTorch pouvez le faire en suivant les dernières tendances.
Consultez par exemple la Linéaire de la couche.
Dans le
__init__
méthode il va appeler Kamming Il fonction init.La similaire pour d'autres types de couches. Pour
conv2d
par exemple de voir ici.À noter : Le gain de l'initialisation correcte est la plus rapide, la vitesse de formation.
Si votre problème mérite d'initialisation, vous pouvez le faire par la suite.