Quelles sont les différences entre numpy.random.rand
et numpy.random.randn
?
D'après la documentation, je sais que la seule différence entre eux provient de la distribution probabiliste dont chaque nombre est tiré, mais la structure globale (dimension) et le type de données utilisé (float) sont les mêmes. J'ai du mal à déboguer un réseau neuronal parce que je crois cela.
Plus précisément, j'essaie de réimplémenter le réseau de neurones fourni dans le module de gestion de l'information. Réseau neuronal et apprentissage profond, livre de Michael Nielson . Le code original peut être trouvé ici . Mon implémentation était la même que celle d'origine, sauf que j'ai défini et initialisé les poids et les biais avec numpy.random.rand
sur init
plutôt que numpy.random.randn
comme dans l'original.
Cependant, mon code qui utilise random.rand
pour initialiser weights and biases
ne fonctionne pas car le réseau n'apprend pas et les poids et les biais ne changent pas.
Quelle(s) différence(s) entre deux fonctions aléatoires provoque(nt) cette bizarrerie ?
1 votes
Le premier tire d'une distribution uniforme et le second d'une distribution normale. "Pourquoi les poids initiaux tirés d'une distribution normale fonctionnent-ils mieux dans l'apprentissage profond ?" est plus adapté pour Validation croisée par contre. Ce n'est pas du tout lié à numpy ou à un cadre d'apprentissage profond.
1 votes
@ayhan merci pour le commentaire. Je pensais qu'il s'agissait d'un problème lié à numpy et non aux poids initiaux, car même si j'initialise les poids avec des zéros, j'obtiens de moins bonnes performances qu'en initialisant avec
random.randn
mais le réseau apprend quand même. Alors que si j'utilise lerandom.rand
le réseau ne fait que répéter le résultat initial encore et encore et n'a rien appris.