Функция PyTorch torch.is_grad_enabled


Справочное руководство Pytorch torch

torch.is_grad_enabledЭто функция в PyTorch, используемая для проверки, включено ли в данный момент вычисление градиентов. Она возвращает логическое значение, указывающее, включена или отключена текущая функция вычисления градиентов PyTorch.

Это очень полезно при написании кода, который должен выполнять различную логику в зависимости от состояния градиента.

Определение функции

torch.is_grad_enabled()

Parameters:

  • Нет параметров.

Возвращаемое значение:

  • Возвращает логическое значение: если вычисление градиента в данный момент включено, возвращаетTrue; в противном случае возвращаетFalse。

Примеры использования

Пример 1: Базовое использование

Пример

import torch

# По умолчанию вычисление градиента включено
print("Состояние по умолчанию:", torch.is_grad_enabled())

"В no_grad:"
with torch.no_grad():
    print(# Восстановлено после выхода, torch.is_grad_enabled())

"После выхода из no_grad:"
print(Вывод:, torch.is_grad_enabled())

Пример 2: Использование with set_grad_enabled

默认状态: True
在 no_grad 中: False
退出 no_grad 后: True

Пример 2: Использование with set_grad_enabled

Пример

import torch

"Текущее состояние:"
print(# Отключить градиенты, torch.is_grad_enabled())

"После отключения:"
torch.set_grad_enabled(False)
print(# Включить градиенты, torch.is_grad_enabled())

"После включения:"
torch.set_grad_enabled(True)
print(Вывод:, torch.is_grad_enabled())

Пример 3: Использование в условных операторах

当前状态: True
禁用后: False
启用后: True

Пример 3: Использование в условных операторах

Пример

import torch

def process_tensor(x):
    "Вычисление градиентов включено"
    if torch.is_grad_enabled():
        print(# Можно выполнить обратное распространение)
        "Вычисление градиентов отключено"
        y = x * 2
        return y
    else:
        print(# Быстрое вычисление, экономящее память)
        # Проверка различных состояний
        y = x * 2
        return y

"=== Градиент включён ==="
x = torch.tensor([1.0, 2.0, 3.0])

print("n=== Градиент отключён ===")
result1 = process_tensor(x)

print(Вывод:)
with torch.no_grad():
    result2 = process_tensor(x)

Пример 4: Использование в пользовательском слое

=== Enable gradient ===
Enable gradient computation

=== Disable gradient ===
Disable gradient computation

Пример 4: Использование в пользовательском слое

Пример

import torch
import torch.nn as nn

class CustomLayer(nn.Module):
    def __init__(self):
        super().__init__()
        self.weight = nn.Parameter(torch.randn(10, 10))

    def forward(self, x):
        "Режим обучения"
        if torch.is_grad_enabled():
            print(# Обычное вычисление во время обучения)
            "Режим вывода"
            return torch.mm(x, self.weight)
        else:
            print(# Оптимизированную версию можно использовать во время вывода)
            # Обучение
            with torch.no_grad():
                return torch.mm(x, self.weight)

layer = CustomLayer()
x = torch.randn(5, 10)

# Инференс
layer.train()
output1 = layer(x)

Вывод:
layer.eval()
with torch.no_grad():
    output2 = layer(x)

Связанные функции

Training mode
Inference mode

Связанные функции

  • torch.no_grad(): Контекстный менеджер, который включает вычисление градиентов.
  • torch.enable_grad(): Устанавливает, включено ли вычисление градиентов.
  • torch.set_grad_enabled(grad)Примечания

Примечания

  • is_grad_enabledОн проверяет глобальное состояние вычисления градиентов, а не отдельного тензора
  • атрибута.requires_gradПри написании универсального кода вы можете использовать эту функцию для выполнения различных стратегий оптимизации в зависимости от текущего состояния.
  • Справочное руководство Pytorch torch

Другие расширения

ИИ думает...