PyTorch torch.enable_grad Funktion


Pytorch torch 参考手册PyTorch torch Referenzhandbuch

torch.enable_gradEs ist ein Kontextmanager in PyTorch, der verwendet wird, um die Gradientenberechnung zu ermöglichen. Er isttorch.no_graddas Gegenteil und wird verwendet, um die Gradientenberechnung in Codeblöcken, die Gradienten erfordern, explizit zu aktivieren.

Dies ist sehr nützlich, wenn Sie vorübergehend ein Modell in Inferenzcode trainieren müssen oder wenn Sie die Gradientenberechnung in einem lokalen Bereich aktivieren müssen.

Funktionsdefinition

torch.enable_grad()

Parameters:

  • Keine Parameter. Dies ist ein Kontextmanager.

Rückgabewert:

  • Gibt einen Kontextmanager zurück, der die Gradientenberechnung in diesem Kontext ermöglicht.

Anwendungsbeispiele

Beispiel 1: Grundlegende Verwendung

Beispiel

import torch

# Standardmäßig in einem no_grad-Kontext
with torch.no_grad():
    x = torch.tensor([1.0, 2.0, 3.0])
    print("In no_grad:", x.requires_grad)

    # Verwende enable_grad, um Gradienten vorübergehend zu aktivieren
    with torch.enable_grad():
        y = x * 2
        print("In enable_grad:", y.requires_grad)

    # Nach dem Verlassen den no_grad-Zustand wiederherstellen
    z = x * 2
    print("Nach dem Verlassen:", z.requires_grad)

Die Ausgabe ist:

在 no_grad 中: False
在 enable_grad 中: True
退出后: False

Beispiel 2: Training und Inferenz mischen

Beispiel

import torch
import torch.nn as nn

model = nn.Linear(10, 2)

# Inferenzmodus
with torch.no_grad():
    x = torch.randn(5, 10)
    output1 = model(x)
    print("Inferenzausgabe:", output1.shape)

    # Wenn Sie während der Inferenz vorübergehend einige Parameter trainieren müssen
    with torch.enable_grad():
        # Erstellen Sie einen Tensor, der für die Berechnung Gradienten benötigt
        temp_weight = torch.randn(10, 10, requires_grad=True)
        temp_output = torch.mm(x, temp_weight)
        print("Gradienten vorübergehend aktivieren:", temp_output.requires_grad)

Die Ausgabe ist:

推理输出: torch.Size([5, 2])
临时启用梯度: True

Beispiel 3: Verwendung als Dekorator

Beispiel

import torch

@torch.enable_grad()
def train_step(x, y):
    """Simuliere Trainingsschritte"""
    # Diese Funktion aktiviert intern die Gradientenberechnung
    loss = (x - y).sum()
    return loss

# In einem no_grad-Kontext aufrufen
with torch.no_grad():
    x = torch.tensor([1.0, 2.0, 3.0])
    y = torch.tensor([0.0, 0.0, 0.0])
    # Der Dekorator stellt sicher, dass die Gradientenberechnung aktiviert ist
    loss = train_step(x, y)
    print("Verlust:", loss)
    print("Benötigt Gradient:", loss.requires_grad)

Die Ausgabe ist:

Loss: tensor(6.)
需要梯度: True

Verwandte Funktionen

  • torch.no_grad(): Deaktiviert die Gradientenberechnung.
  • torch.set_grad_enabled(grad): Aktiviert oder deaktiviert die Gradientenberechnung gemäß den Parametern.
  • torch.is_grad_enabled(): Prüft, ob die Gradientenberechnung derzeit aktiviert ist.

Hinweise

  • enable_gradWird hauptsächlich verwendet, umno_graddie Gradientenberechnung vorübergehend in einem Kontext zu aktivieren.
  • Wenn es in einer Umgebung verwendet wird, in der Gradienten global aktiviert sindenable_grad, hat es keine Wirkung.
  • Es wird empfohlen, zu verwendenenable_gradder Dekorator, um sicherzustellen, dass Gradienten innerhalb der Funktion immer aktiviert sind.

Pytorch torch 参考手册PyTorch torch Referenzhandbuch

Andere Erweiterungen