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

Класс Adagrad

Класс Adagrad реализует адаптивный градиентный алгоритм оптимизации, который накапливает квадраты градиентов для каждого параметра и использует их для индивидуальной настройки скорости обучения. Это позволяет эффективно обучать модели с разреженными данными и автоматически уменьшать скорость обучения для часто обновляемых параметров. При создании объекта класса первым параметром передаются параметры модели, вторым - скорость обучения.

Синтаксис

torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)

Основные параметры конструктора:

  • params - итерируемый объект с параметрами модели (например, model.parameters)
  • lr - скорость обучения (по умолчанию 0.01)
  • lr_decay - коэффициент затухания скорости обучения (по умолчанию 0)
  • weight_decay - коэффициент регуляризации L2 (по умолчанию 0)
  • initial_accumulator_value - начальное значение аккумулятора квадратов градиентов (по умолчанию 0)
  • eps - небольшое число для численной стабильности (по умолчанию 1e-10)

Пример

Создадим простую линейную модель и обучим её с помощью оптимизатора Adagrad:

import torch import torch.nn as nn import torch.optim as optim model = nn.Linear(10, 1) optimizer = optim.Adagrad(model.parameters(), lr=0.01) print(optimizer)

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

Adagrad ( Parameter Group 0 dampening: 0 eps: 1e-10 foreach: None fused: False initial_accumulator_value: 0 lr: 0.01 lr_decay: 0 maximize: False weight_decay: 0 )

Пример

Используем оптимизатор для обучения модели на синтетических данных:

import torch import torch.nn as nn import torch.optim as optim torch.manual_seed(0) model = nn.Linear(1, 1) optimizer = optim.Adagrad(model.parameters(), lr=0.1) criterion = nn.MSELoss() X = torch.randn(100, 1) y = 2 * X + 1 + 0.1 * torch.randn(100, 1) for epoch in range(10): optimizer.zero_grad() predictions = model(X) loss = criterion(predictions, y) loss.backward() optimizer.step() if epoch % 3 == 0: print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

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

Epoch 0, Loss: 2.1982 Epoch 3, Loss: 0.6827 Epoch 6, Loss: 0.2045 Epoch 9, Loss: 0.0612

Пример

Настройка оптимизатора с использованием затухания скорости обучения и регуляризации:

import torch import torch.nn as nn import torch.optim as optim torch.manual_seed(0) model = nn.Sequential( nn.Linear(20, 50), nn.ReLU(), nn.Linear(50, 1) ) optimizer = optim.Adagrad( model.parameters(), lr=0.05, lr_decay=1e-4, weight_decay=1e-5, initial_accumulator_value=0.1, eps=1e-8 ) print(f"Learning rate: {optimizer.param_groups[0]['lr']}") print(f"Learning rate decay: {optimizer.param_groups[0]['lr_decay']}") print(f"Weight decay: {optimizer.param_groups[0]['weight_decay']}")

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

Learning rate: 0.05 Learning rate decay: 0.0001 Weight decay: 1e-05

Пример

Пример обновления параметров оптимизатора после создания:

import torch import torch.nn as nn import torch.optim as optim model = nn.Linear(10, 5) optimizer = optim.Adagrad(model.parameters(), lr=0.01) print(f"Initial learning rate: {optimizer.param_groups[0]['lr']}") for param_group in optimizer.param_groups: param_group['lr'] = 0.001 print(f"Updated learning rate: {optimizer.param_groups[0]['lr']}") optimizer.add_param_group({ 'params': list(model.parameters()), 'lr': 0.005 }) print(f"Number of parameter groups: {len(optimizer.param_groups)}")

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

Initial learning rate: 0.01 Updated learning rate: 0.001 Number of parameter groups: 2

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

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