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

Состояние оптимизатора в PyTorch

При длинном обучении полезно запоминать не только веса модели, но и внутренние данные спуска. У объекта SGD метод state_dict собирает накопленные буферы и настройки групп параметров. Сделаем шаг обновления и снимем словарь:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(1, 1) optimizer = torch.optim.SGD( model.parameters(), lr=0.1, momentum=0.9 ) x = torch.tensor([[1.0]]) y = torch.tensor([[2.0]]) pred = model(x) loss = ((pred - y) ** 2).sum() loss.backward() optimizer.step() snapshot = optimizer.state_dict() print(len(snapshot["state"])) # выведет 2

Словарь можно записать на диск тем же способом, что и веса модели. На новом объекте SGD с теми же параметрами метод load_state_dict вернёт буферы и скорость шага:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(1, 1) optimizer = torch.optim.SGD( model.parameters(), lr=0.1, momentum=0.9 ) x = torch.tensor([[1.0]]) y = torch.tensor([[2.0]]) pred = model(x) loss = ((pred - y) ** 2).sum() loss.backward() optimizer.step() snapshot = optimizer.state_dict() resumed = torch.optim.SGD( model.parameters(), lr=0.1, momentum=0.9 ) resumed.load_state_dict(snapshot) lr = resumed.state_dict()["param_groups"][0]["lr"] print(lr) # выведет 0.1

Создайте линейный слой 1 на 1 и объект спуска со скоростью 0.05 и импульсом 0.8. Выполните один шаг по паре [[2.0]] и эталону [[4.0]]. Снимите словарь внутреннего состояния спуска и выведите, сколько записей лежит во внутреннем состоянии.

Соберите преобразование 2 на 1, настройте спуск с импульсом 0.9 и скоростью 0.1. После одного шага сохраните снимок состояния в opt.pt. Создайте новый объект спуска с теми же настройками для тех же параметров, восстановите данные из файла и выведите скорость шага из первой группы.

Опишите модель с одним линейным слоем, выполните шаг спуска с импульсом. Перенесите внутреннее состояние на другой объект спуска того же класса и выведите, совпадает ли число записей внутреннего состояния до и после переноса.

←
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить