Condivisione della tecnologia

[PyTorch] torch.fmod utilizza la distribuzione normale troncata per inizializzare i pesi della rete neurale

2024-07-11

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

Questo frammento di codice mostra come inizializzare i pesi di una rete neurale utilizzando PyTorch, utilizzando la distribuzione normale troncata. Una distribuzione normale troncata significa che i valori generati vengono troncati entro un certo intervallo per evitare valori estremi.usato quitorch.fmod Come soluzione alternativa per ottenere questo effetto.

Spiegazione dettagliata

1. Distribuzione normale troncata

La distribuzione normale troncata è una modifica della distribuzione normale che garantisce che i valori generati rientrino in un determinato intervallo. Nello specifico,torch.fmod La funzione restituisce il resto del tensore di input diviso per 2 (ovvero, in modo tale che il valore risultante sia compreso tra -2 e 2).

2. Inizializzazione del peso

Nel codice, i quattro tensori di peso sono calcolati secondo diverse deviazioni standard (init_sd_first, init_sd_middle, init_sd_last ) è generato da una distribuzione normale troncata. Le dimensioni specifiche sono:

  • La forma del tensore del peso del primo strato è (x_dim, width n_double)
  • La forma dei due tensori di peso dello strato intermedio è (width, width n_double)
  • La forma del tensore del peso dell'ultimo strato è (width, 1)

Questi tensori di peso sono generati come segue:

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)
]