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

Функция clip_grad_norm_

Функция clip_grad_norm_ обрезает градиенты параметров модели по норме. Первым параметром функция принимает итератор параметров модели. Вторым параметром передается максимальная норма. Третьим параметром можно задать тип нормы. Функция изменяет градиенты на месте и возвращает общую норму градиентов.

Синтаксис

torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2.0)

Пример

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

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(2, 1) optimizer = torch.optim.SGD(model.parameters(), lr=0.01) x = torch.tensor([[1.0, 2.0]]) y = torch.tensor([[1.0]]) criterion = nn.MSELoss() loss = criterion(model(x), y) loss.backward() total_norm = torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) print(total_norm)

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

tensor(0.3388)

Пример

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

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(2, 1) optimizer = torch.optim.SGD(model.parameters(), lr=0.01) for epoch in range(5): x = torch.randn(4, 2) y = torch.randn(4, 1) optimizer.zero_grad() loss = nn.MSELoss()(model(x), y) loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), 0.5) optimizer.step() print(f'Epoch {epoch + 1}, loss: {loss.item():.4f}')

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

Epoch 1, loss: 2.5166 Epoch 2, loss: 1.3200 Epoch 3, loss: 2.1503 Epoch 4, loss: 0.4488 Epoch 5, loss: 1.4112

Пример

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

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Sequential( nn.Linear(2, 3), nn.ReLU(), nn.Linear(3, 1) ) x = torch.randn(2, 2) y = torch.randn(2, 1) criterion = nn.MSELoss() loss = criterion(model(x), y) loss.backward() total_norm = torch.nn.utils.clip_grad_norm_( model.parameters(), max_norm=1.0, norm_type=float('inf') ) print(total_norm)

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

tensor(1.0000)

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

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