Función PyTorch torch.is_grad_enabled


Manual de referencia de Pytorch torch

torch.is_grad_enabledEs una función en PyTorch que se utiliza para comprobar si el cálculo de gradientes está actualmente habilitado. Devuelve un valor booleano que indica si la función de cálculo de gradientes actual de PyTorch está habilitada o deshabilitada.

Esto es muy útil al escribir código que necesita ejecutar diferente lógica según el estado del gradiente.

Definición de la función

torch.is_grad_enabled()

Parámetros:

  • Sin parámetros.

Valor de retorno:

  • Devuelve un valor booleano: si el cálculo de gradientes está actualmente habilitado, devuelveTrue; de lo contrario, devuelveFalse。

Ejemplos de uso

Ejemplo 1: Uso básico

Ejemplo

import torch

# De forma predeterminada, el cálculo de gradientes está habilitado
print("Estado predeterminado:", torch.is_grad_enabled())

# En el contexto no_grad
with torch.no_grad():
    print("Dentro de no_grad:", torch.is_grad_enabled())

# Se restaura después de salir
print("Después de salir de no_grad:", torch.is_grad_enabled())

El resultado de salida es:

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

Ejemplo 2: Uso combinado con set_grad_enabled

Ejemplo

import torch

# Comprobar el estado actual
print("Estado actual:", torch.is_grad_enabled())

# Deshabilitar el gradiente
torch.set_grad_enabled(False)
print("Después de deshabilitar:", torch.is_grad_enabled())

# Habilitar el gradiente
torch.set_grad_enabled(True)
print("Después de habilitar:", torch.is_grad_enabled())

El resultado de salida es:

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

Ejemplo 3: Uso en sentencias condicionales

Ejemplo

import torch

def process_tensor(x):
    """Procesa tensores según el estado del gradiente"""
    if torch.is_grad_enabled():
        print("Cálculo de gradientes habilitado")
        # Se puede realizar la retropropagación
        y = x * 2
        return y
    else:
        print("Cálculo de gradientes deshabilitado")
        # Cálculo rápido que ahorra memoria
        y = x * 2
        return y

# Probar diferentes estados
x = torch.tensor([1.0, 2.0, 3.0])

print("=== Gradiente habilitado ===")
result1 = process_tensor(x)

print("n=== Gradiente deshabilitado ===")
with torch.no_grad():
    result2 = process_tensor(x)

El resultado de salida es:

=== Habilitar gradiente ===
Habilitar el cálculo de gradientes

=== Deshabilitar gradiente ===
Deshabilitar el cálculo de gradientes

Ejemplo 4: Uso en capas personalizadas

Ejemplo

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):
        # Comprobar el estado del gradiente para un manejo diferente
        if torch.is_grad_enabled():
            print("Modo entrenamiento")
            # Cálculo normal durante el entrenamiento
            return torch.mm(x, self.weight)
        else:
            print("Modo inferencia")
            # Durante la inferencia se puede usar una versión optimizada
            with torch.no_grad():
                return torch.mm(x, self.weight)

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

# Entrenamiento
layer.train()
output1 = layer(x)

# Inferencia
layer.eval()
with torch.no_grad():
    output2 = layer(x)

El resultado de salida es:

Modo de entrenamiento
Modo de inferencia

Funciones relacionadas

  • torch.no_grad(): Administrador de contexto que deshabilita el cálculo de gradientes.
  • torch.enable_grad(): Administrador de contexto que habilita el cálculo de gradientes.
  • torch.set_grad_enabled(grad): Establece si el cálculo de gradientes está habilitado.

Notas

  • is_grad_enabledEs una función de solo lectura y no cambia ningún estado.
  • Comprueba el estado global del cálculo de gradientes, no elrequires_gradatributo de un tensor individual.
  • Al escribir código de uso general, se puede usar esta función para ejecutar diferentes estrategias de optimización según el estado actual.

Manual de referencia de Pytorch torch

Otras extensiones