Todos os desafios
Fácil 0 resolvidos 0% de aceitação

Inicialização de pesos Xavier e He

Calcule o intervalo ou o desvio padrão usado para inicializar os pesos de uma camada.

O que você vai aprender

  • Calcular as faixas de inicialização de uma camada
  • Escolher entre Xavier e He
  • Entender por que a inicialização importa

Problema

Ver original (inglês)

Pesos iniciais grandes ou pequenos demais dificultam o treinamento de redes profundas. Dois métodos padrão escolhem a escala pelo tamanho da camada, onde fan_in é o número de entradas e fan_out o número de saídas:

methodretorna
"xavier_uniform"limite √(6 / (fan_in + fan_out)), pesos sorteados em [-limite, limite]
"xavier_normal"desvio padrão √(2 / (fan_in + fan_out))
"he_uniform"limite √(6 / fan_in)
"he_normal"desvio padrão √(2 / fan_in)

Xavier (Glorot) é adequado para camadas sigmoide e tanh; He, para camadas ReLU.

Implemente init_bound(method, fan_in, fan_out).

Entrada

method: Um de "xavier_uniform", "xavier_normal", "he_uniform" ou "he_normal".

fan_in, fan_out: O número de entradas e saídas da camada.

Saída

Retorne o limite ou o desvio padrão como número decimal.

Restrições

1 ≤ fan_in, fan_out ≤ 100.000

Exemplos

Exemplo 1
Entrada:
fan_in = 3
method = "xavier_uniform"
fan_out = 3

Saída esperada:
expected = 1.0
Entrada:
long long fan_in = 3;
std::string method = "xavier_uniform";
long long fan_out = 3;

Saída esperada:
double expected = 1.0;
Entrada:
long fan_in = 3;
string method = "xavier_uniform";
long fan_out = 3;

Saída esperada:
double expected = 1.0;

Explicação

√(6 / (3 + 3)) = √1 = 1, então os pesos são sorteados em [-1, 1].

Exemplo 2
Entrada:
fan_in = 50
method = "he_normal"
fan_out = 10

Saída esperada:
expected = 0.2
Entrada:
long long fan_in = 50;
std::string method = "he_normal";
long long fan_out = 10;

Saída esperada:
double expected = 0.2;
Entrada:
long fan_in = 50;
string method = "he_normal";
long fan_out = 10;

Saída esperada:
double expected = 0.2;

Explicação

He usa só fan_in: √(2 / 50) = √0.04 = 0.2.

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.