Обмен технологиями

[PyTorch] torch.fmod использует усеченное нормальное распределение для инициализации весов нейронной сети.

2024-07-11

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

В этом фрагменте кода показано, как инициализировать веса нейронной сети с помощью PyTorch, используя усеченное нормальное распределение. Усеченное нормальное распределение означает, что сгенерированные значения усекаются в пределах диапазона, чтобы предотвратить экстремальные значения.используется здесьtorch.fmod В качестве обходного пути для достижения этого эффекта.

Детальное объяснение

1. Усеченное нормальное распределение

Усеченное нормальное распределение — это модификация нормального распределения, которая гарантирует, что сгенерированные значения попадают в определенный диапазон. Конкретно,torch.fmod Функция возвращает остаток входного тензора, разделенный на 2 (т. е. такой, что результирующее значение находится в диапазоне от -2 до 2).

2. Инициализация веса

В коде четыре весовых тензора рассчитываются в соответствии с различными стандартными отклонениями (init_sd_first, init_sd_middle, init_sd_last ) генерируется из усеченного нормального распределения. Конкретные размеры:

  • Форма весового тензора первого слоя имеет вид (x_dim, width n_double)
  • Форма двух весовых тензоров среднего слоя следующая: (width, width n_double)
  • Форма весового тензора последнего слоя имеет вид (width, 1)

Эти весовые тензоры генерируются следующим образом:

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