Partage de technologie

[PyTorch] torch.fmod utilise une distribution normale tronquée pour initialiser les poids du réseau neuronal

2024-07-11

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

Cet extrait de code montre comment initialiser les poids d'un réseau de neurones à l'aide de PyTorch, en utilisant la distribution normale tronquée. Une distribution normale tronquée signifie que les valeurs générées sont tronquées dans une plage pour éviter les valeurs extrêmes.utilisé icitorch.fmod Comme solution de contournement pour obtenir cet effet.

Explication détaillée

1. Distribution normale tronquée

La distribution normale tronquée est une modification de la distribution normale qui garantit que les valeurs générées se situent dans une certaine plage. Spécifiquement,torch.fmod La fonction renvoie le reste du tenseur d'entrée divisé par 2 (c'est-à-dire tel que la valeur résultante soit comprise entre -2 et 2).

2. Initialisation du poids

Dans le code, les quatre tenseurs de poids sont calculés selon différents écarts types (init_sd_first, init_sd_middle, init_sd_last ) est généré à partir d'une distribution normale tronquée. Les dimensions spécifiques sont :

  • La forme du tenseur de poids de la première couche est (x_dim, width n_double)
  • La forme des deux tenseurs de poids de la couche intermédiaire est (width, width n_double)
  • La forme du tenseur de poids de la dernière couche est (width, 1)

Ces tenseurs de poids sont générés comme suit :

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