Tous les défis
Facile 0 résolus 0 % de réussite

Initialisation des poids de Xavier et He

Calculez l'intervalle ou l'écart-type utilisé pour initialiser les poids d'une couche.

Ce que vous allez apprendre

  • Calculer les plages d'initialisation d'une couche
  • Choisir entre Xavier et He
  • Comprendre pourquoi l'initialisation compte

Problème

Des poids de départ trop grands ou trop petits rendent les réseaux profonds difficiles à entraîner. Deux méthodes standard choisissent l'échelle selon la taille de la couche, où fan_in est le nombre d'entrées et fan_out le nombre de sorties :

methodrenvoie
"xavier_uniform"limite √(6 / (fan_in + fan_out)), poids tirés dans [-limite, limite]
"xavier_normal"écart-type √(2 / (fan_in + fan_out))
"he_uniform"limite √(6 / fan_in)
"he_normal"écart-type √(2 / fan_in)

Xavier (Glorot) convient aux couches sigmoïde et tanh ; He convient aux couches ReLU.

Implémentez init_bound(method, fan_in, fan_out).

Entrée

method : l'une des valeurs "xavier_uniform", "xavier_normal", "he_uniform" ou "he_normal".

fan_in, fan_out : le nombre d'entrées et de sorties de la couche.

Sortie

Renvoyez la limite ou l'écart-type sous forme de nombre décimal.

Contraintes

1 ≤ fan_in, fan_out ≤ 100 000

Exemples

Exemple 1
Entrée :
fan_in = 3
method = "xavier_uniform"
fan_out = 3

Sortie attendue :
expected = 1.0
Entrée :
long long fan_in = 3;
std::string method = "xavier_uniform";
long long fan_out = 3;

Sortie attendue :
double expected = 1.0;
Entrée :
long fan_in = 3;
string method = "xavier_uniform";
long fan_out = 3;

Sortie attendue :
double expected = 1.0;

Explication

√(6 / (3 + 3)) = √1 = 1, donc les poids sont tirés dans [-1, 1].

Exemple 2
Entrée :
fan_in = 50
method = "he_normal"
fan_out = 10

Sortie attendue :
expected = 0.2
Entrée :
long long fan_in = 50;
std::string method = "he_normal";
long long fan_out = 10;

Sortie attendue :
double expected = 0.2;
Entrée :
long fan_in = 50;
string method = "he_normal";
long fan_out = 10;

Sortie attendue :
double expected = 0.2;

Explication

He n'utilise que fan_in : √(2 / 50) = √0.04 = 0.2.

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.