РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
521 of 769 menu

Класс Adam

Класс Adam реализует один из самых популярных оптимизаторов в глубоком обучении. Он вычисляет индивидуальные скорости обучения для каждого параметра на основе оценок первого и второго моментов градиентов. Это позволяет ему эффективно работать с разреженными градиентами, нестационарными целевыми функциями и очень зашумлёнными данными. Класс наследуется от torch.optim.Optimizer и принимает на вход список параметров модели, а также гиперпараметры: скорость обучения (lr), коэффициенты затухания для моментов (betas), эпсилон (eps) для численной стабильности и коэффициент L2-регуляризации (weight_decay).

Синтаксис

torch.optim.Adam( params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False )

Пример

Создадим простую линейную модель и обучим её на синтетических данных, используя оптимизатор Adam:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(5, 1) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) criterion = nn.MSELoss() x = torch.randn(10, 5) y = torch.randn(10, 1) for epoch in range(100): optimizer.zero_grad() pred = model(x) loss = criterion(pred, y) loss.backward() optimizer.step() print(loss.item())

Результат выполнения кода:

0.6428570747375488

Пример

Используем оптимизатор Adam с параметром weight_decay для L2-регуляризации:

import torch import torch.nn as nn torch.manual_seed(1) model = nn.Linear(5, 1) optimizer = torch.optim.Adam( model.parameters(), lr=0.01, weight_decay=0.001 ) criterion = nn.MSELoss() x = torch.randn(10, 5) y = torch.randn(10, 1) for epoch in range(100): optimizer.zero_grad() pred = model(x) loss = criterion(pred, y) loss.backward() optimizer.step() print(loss.item())

Результат выполнения кода:

0.6558964252471924

Пример

Включим флаг amsgrad для использования максимума квадратов градиентов вместо скользящего среднего:

import torch import torch.nn as nn torch.manual_seed(2) model = nn.Linear(5, 1) optimizer = torch.optim.Adam( model.parameters(), lr=0.01, amsgrad=True ) criterion = nn.MSELoss() x = torch.randn(10, 5) y = torch.randn(10, 1) for epoch in range(100): optimizer.zero_grad() pred = model(x) loss = criterion(pred, y) loss.backward() optimizer.step() print(loss.item())

Результат выполнения кода:

0.7163512706756592

Смотрите также

  • класс AdamW,
    который реализует Adam с правильной L2-регуляризацией
  • класс SGD,
    который реализует стохастический градиентный спуск
  • класс RMSprop,
    который нормализует градиенты с помощью скользящего среднего квадратов
  • класс Adagrad,
    который адаптирует скорость обучения для каждого параметра
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить