Compartir tecnología

[PyTorch] torch.fmod utiliza una distribución normal truncada para inicializar los pesos de la red neuronal

2024-07-11

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

Este fragmento de código muestra cómo inicializar los pesos de una red neuronal usando PyTorch, usando la distribución normal truncada. Una distribución normal truncada significa que los valores generados se truncan dentro de un rango determinado para evitar valores extremos.usado aquítorch.fmod Como solución alternativa para lograr este efecto.

Explicación detallada

1. Distribución normal truncada

La distribución normal truncada es una modificación de la distribución normal que garantiza que los valores generados caigan dentro de un rango determinado. Específicamente,torch.fmod La función devuelve el resto del tensor de entrada dividido por 2 (es decir, de modo que el valor resultante esté entre -2 y 2).

2. Inicialización del peso

En el código, los cuatro tensores de peso se calculan según diferentes desviaciones estándar (init_sd_first, init_sd_middle, init_sd_last ) se genera a partir de una distribución normal truncada. Las dimensiones específicas son:

  • La forma del tensor de peso de la primera capa es (x_dim, width n_double)
  • La forma de los dos tensores de peso de la capa intermedia es (width, width n_double)
  • La forma del tensor de peso de la última capa es (width, 1)

Estos tensores de peso se generan de la siguiente manera:

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