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

Метод step

Метод step класса Optimizer выполняет обновление параметров модели, используя вычисленные градиенты. Этот метод вызывается после выполнения обратного распространения ошибки и является ключевым этапом в процессе обучения нейронных сетей. При вызове step оптимизатор применяет выбранный алгоритм оптимизации (SGD, Adam, RMSprop и другие) для обновления весов модели.

Синтаксис

optimizer.step()

Метод может принимать опциональный параметр closure - функцию, которая пересчитывает потери. Этот параметр используется в некоторых алгоритмах оптимизации, требующих повторного вычисления функции потерь.

optimizer.step(closure)

Пример

Давайте создадим простую линейную модель и обучим её с использованием оптимизатора SGD:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(1, 1) optimizer = torch.optim.SGD(model.parameters(), lr=0.01) x = torch.tensor([[1.0], [2.0], [3.0]]) y = torch.tensor([[2.0], [4.0], [6.0]]) for epoch in range(100): pred = model(x) loss = nn.MSELoss()(pred, y) optimizer.zero_grad() loss.backward() optimizer.step() print(model.weight.item(), model.bias.item())

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

2.0001156321258545 0.000600355790939182

Пример

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

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Sequential( nn.Linear(2, 4), nn.ReLU(), nn.Linear(4, 1) ) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) x = torch.tensor([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]]) y = torch.tensor([[3.0], [5.0], [7.0]]) for epoch in range(200): pred = model(x) loss = nn.MSELoss()(pred, y) optimizer.zero_grad() loss.backward() optimizer.step() print(loss.item())

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

0.00014271571962260455

Пример

Использование параметра closure для алгоритма LBFGS, который требует повторного вычисления потерь:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(1, 1) optimizer = torch.optim.LBFGS(model.parameters(), lr=1.0) x = torch.tensor([[1.0], [2.0], [3.0]]) y = torch.tensor([[2.0], [4.0], [6.0]]) for epoch in range(100): def closure(): optimizer.zero_grad() pred = model(x) loss = nn.MSELoss()(pred, y) loss.backward() return loss optimizer.step(closure) print(model.weight.item(), model.bias.item())

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

2.0000100135803223 0.00019091507430928946

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

  • класс Optimizer,
    который является базовым классом для всех оптимизаторов
  • метод zero_grad,
    который обнуляет градиенты перед обратным распространением
  • метод state_dict,
    который возвращает состояние оптимизатора для сохранения
  • метод load_state_dict,
    который загружает состояние оптимизатора из сохранённого словаря
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить