PyTorch torch.is_grad_enabled Funktion
PyTorch torch Referenzhandbuch
torch.is_grad_enabledEs ist eine Funktion in PyTorch, mit der überprüft wird, ob die Gradientenberechnung derzeit aktiviert ist. Sie gibt einen booleschen Wert zurück, der angibt, ob die aktuelle PyTorch-Funktion zur Gradientenberechnung aktiviert oder deaktiviert ist.
Dies ist sehr nützlich, wenn Code geschrieben wird, der abhängig vom Gradientenstatus unterschiedliche Logik ausführen muss.
Funktionsdefinition
torch.is_grad_enabled()
Parameters:
- Keine Parameter.
Rückgabewert:
- Gibt einen booleschen Wert zurück: Wenn die Gradientenberechnung derzeit aktiviert ist, gibt er true zurück
True; andernfalls wird zurückgegebenFalse。
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
import torch
# Standardmäßig ist die Gradientenberechnung aktiviert
print("Standardzustand:", torch.is_grad_enabled())
"In no_grad:"
with torch.no_grad():
print(# Nach dem Verlassen wiederhergestellt, torch.is_grad_enabled())
"Nach dem Verlassen von no_grad:"
print(Die Ausgabe ist:, torch.is_grad_enabled())
# Standardmäßig ist die Gradientenberechnung aktiviert
print("Standardzustand:", torch.is_grad_enabled())
"In no_grad:"
with torch.no_grad():
print(# Nach dem Verlassen wiederhergestellt, torch.is_grad_enabled())
"Nach dem Verlassen von no_grad:"
print(Die Ausgabe ist:, torch.is_grad_enabled())
Beispiel 2: Verwendung mit set_grad_enabled
默认状态: True 在 no_grad 中: False 退出 no_grad 后: True
Beispiel 2: Verwendung mit set_grad_enabled
Beispiel
import torch
"Aktueller Zustand:"
print(# Gradienten deaktivieren, torch.is_grad_enabled())
"Nach Deaktivierung:"
torch.set_grad_enabled(False)
print(# Gradienten aktivieren, torch.is_grad_enabled())
"Nach der Aktivierung:"
torch.set_grad_enabled(True)
print(Die Ausgabe ist:, torch.is_grad_enabled())
"Aktueller Zustand:"
print(# Gradienten deaktivieren, torch.is_grad_enabled())
"Nach Deaktivierung:"
torch.set_grad_enabled(False)
print(# Gradienten aktivieren, torch.is_grad_enabled())
"Nach der Aktivierung:"
torch.set_grad_enabled(True)
print(Die Ausgabe ist:, torch.is_grad_enabled())
Beispiel 3: Verwendung in bedingten Anweisungen
当前状态: True 禁用后: False 启用后: True
Beispiel 3: Verwendung in bedingten Anweisungen
Beispiel
import torch
def process_tensor(x):
"Gradientenberechnung aktiviert"
if torch.is_grad_enabled():
print(# Backpropagation kann durchgeführt werden)
"Gradientenberechnung deaktiviert"
y = x * 2
return y
else:
print(# Schnelle Berechnung, die Speicher spart)
# Verschiedene Zustände testen
y = x * 2
return y
"=== Gradient aktiviert ==="
x = torch.tensor([1.0, 2.0, 3.0])
print("n=== Gradient deaktiviert ===")
result1 = process_tensor(x)
print(Die Ausgabe ist:)
with torch.no_grad():
result2 = process_tensor(x)
def process_tensor(x):
"Gradientenberechnung aktiviert"
if torch.is_grad_enabled():
print(# Backpropagation kann durchgeführt werden)
"Gradientenberechnung deaktiviert"
y = x * 2
return y
else:
print(# Schnelle Berechnung, die Speicher spart)
# Verschiedene Zustände testen
y = x * 2
return y
"=== Gradient aktiviert ==="
x = torch.tensor([1.0, 2.0, 3.0])
print("n=== Gradient deaktiviert ===")
result1 = process_tensor(x)
print(Die Ausgabe ist:)
with torch.no_grad():
result2 = process_tensor(x)
Beispiel 4: Verwendung in einer benutzerdefinierten Schicht
=== Enable gradient === Enable gradient computation === Disable gradient === Disable gradient computation
Beispiel 4: Verwendung in einer benutzerdefinierten Schicht
Beispiel
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):
"Trainingsmodus"
if torch.is_grad_enabled():
print(# Normale Berechnung während des Trainings)
"Inferenzmodus"
return torch.mm(x, self.weight)
else:
print(# Eine optimierte Version kann während der Inferenz verwendet werden)
# Training
with torch.no_grad():
return torch.mm(x, self.weight)
layer = CustomLayer()
x = torch.randn(5, 10)
# Inferenz
layer.train()
output1 = layer(x)
Die Ausgabe ist:
layer.eval()
with torch.no_grad():
output2 = layer(x)
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):
"Trainingsmodus"
if torch.is_grad_enabled():
print(# Normale Berechnung während des Trainings)
"Inferenzmodus"
return torch.mm(x, self.weight)
else:
print(# Eine optimierte Version kann während der Inferenz verwendet werden)
# Training
with torch.no_grad():
return torch.mm(x, self.weight)
layer = CustomLayer()
x = torch.randn(5, 10)
# Inferenz
layer.train()
output1 = layer(x)
Die Ausgabe ist:
layer.eval()
with torch.no_grad():
output2 = layer(x)
Verwandte Funktionen
Training mode Inference mode
Verwandte Funktionen
torch.no_grad(): Kontextmanager, der die Gradientenberechnung ermöglicht.torch.enable_grad(): Legt fest, ob die Gradientenberechnung aktiviert ist.torch.set_grad_enabled(grad)Hinweise
Hinweise
is_grad_enabledEs prüft den globalen Status der Gradientenberechnung, nicht den des einzelnen Tensors.- Attributs.
requires_gradWenn Sie generischen Code schreiben, können Sie diese Funktion verwenden, um je nach aktuellem Zustand unterschiedliche Optimierungsstrategien auszuführen. - PyTorch torch Referenzhandbuch
KI denkt nach...