Compartilhamento de tecnologia

[PyTorch] torch.fmod usa distribuição normal truncada para inicializar os pesos da rede neural

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Este trecho de código mostra como inicializar os pesos de uma rede neural usando PyTorch, usando a distribuição normal truncada. Uma distribuição normal truncada significa que os valores gerados são truncados dentro de um intervalo para evitar valores extremos.usado aquitorch.fmod Como uma solução alternativa para obter esse efeito.

Explicação detalhada

1. Distribuição normal truncada

A distribuição normal truncada é uma modificação da distribuição normal que garante que os valores gerados estejam dentro de um determinado intervalo. Especificamente,torch.fmod A função retorna o restante do tensor de entrada dividido por 2 (ou seja, de forma que o valor resultante esteja entre -2 e 2).

2. Inicialização de peso

No código, os quatro tensores de peso são calculados de acordo com diferentes desvios padrão (init_sd_first, init_sd_middle, init_sd_last ) é gerado a partir de uma distribuição normal truncada. As dimensões específicas são:

  • A forma do tensor de peso da primeira camada é (x_dim, width n_double)
  • A forma dos dois tensores de peso da camada intermediária é (width, width n_double)
  • A forma do tensor de peso da última camada é (width, 1)

Esses tensores de peso são gerados da seguinte forma:

initial_weights = [
    torch.fmod(torch.normal(0, init_sd_first, size=(x_dim, width   n_double)), 2),
    torch.fmod(torch.normal(0, init_sd_middle, size=(width, width   n_double)), 2),
    torch.fmod(torch.normal(0, init_sd_middle, size=(width, width   n_double)), 2),
    torch.fmod(torch.normal(0, init_sd_last, size=(width, 1)), 2)
]