Fonction torch.is_grad_enabled de PyTorch
Manuel de référence Pytorch torch
torch.is_grad_enabledIl s'agit d'une fonction de PyTorch utilisée pour vérifier si le calcul des gradients est actuellement activé. Elle renvoie une valeur booléenne indiquant si la fonctionnalité actuelle de calcul des gradients de PyTorch est activée ou désactivée.
Ceci est très utile lors de l'écriture de code qui doit exécuter une logique différente en fonction de l'état du gradient.
Définition de fonction
torch.is_grad_enabled()
Parameters:
- Aucun paramètre.
Valeur de retour:
- Renvoie une valeur booléenne : si le calcul du gradient est actuellement activé, renvoie
True; sinon renvoieFalse。
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
# Par défaut, le calcul du gradient est activé
print("État par défaut :", torch.is_grad_enabled())
"Dans no_grad :"
with torch.no_grad():
print(# Restauré après la sortie, torch.is_grad_enabled())
"Après la sortie de no_grad :"
print(La sortie est :, torch.is_grad_enabled())
# Par défaut, le calcul du gradient est activé
print("État par défaut :", torch.is_grad_enabled())
"Dans no_grad :"
with torch.no_grad():
print(# Restauré après la sortie, torch.is_grad_enabled())
"Après la sortie de no_grad :"
print(La sortie est :, torch.is_grad_enabled())
Exemple 2 : Utilisation avec set_grad_enabled
默认状态: True 在 no_grad 中: False 退出 no_grad 后: True
Exemple 2 : Utilisation avec set_grad_enabled
Exemple
import torch
"État actuel :"
print(# Désactiver les gradients, torch.is_grad_enabled())
"Après désactivation :"
torch.set_grad_enabled(False)
print(# Activer les gradients, torch.is_grad_enabled())
"Après activation :"
torch.set_grad_enabled(True)
print(La sortie est :, torch.is_grad_enabled())
"État actuel :"
print(# Désactiver les gradients, torch.is_grad_enabled())
"Après désactivation :"
torch.set_grad_enabled(False)
print(# Activer les gradients, torch.is_grad_enabled())
"Après activation :"
torch.set_grad_enabled(True)
print(La sortie est :, torch.is_grad_enabled())
Exemple 3 : Utilisation dans des instructions conditionnelles
当前状态: True 禁用后: False 启用后: True
Exemple 3 : Utilisation dans des instructions conditionnelles
Exemple
import torch
def process_tensor(x):
"Calcul des gradients activé"
if torch.is_grad_enabled():
print(# La rétropropagation peut être effectuée)
"Calcul des gradients désactivé"
y = x * 2
return y
else:
print(# Calcul rapide qui économise de la mémoire)
# Tester différents états
y = x * 2
return y
"=== Gradient activé ==="
x = torch.tensor([1.0, 2.0, 3.0])
print("n=== Gradient désactivé ===")
result1 = process_tensor(x)
print(La sortie est :)
with torch.no_grad():
result2 = process_tensor(x)
def process_tensor(x):
"Calcul des gradients activé"
if torch.is_grad_enabled():
print(# La rétropropagation peut être effectuée)
"Calcul des gradients désactivé"
y = x * 2
return y
else:
print(# Calcul rapide qui économise de la mémoire)
# Tester différents états
y = x * 2
return y
"=== Gradient activé ==="
x = torch.tensor([1.0, 2.0, 3.0])
print("n=== Gradient désactivé ===")
result1 = process_tensor(x)
print(La sortie est :)
with torch.no_grad():
result2 = process_tensor(x)
Exemple 4 : Utilisation dans une couche personnalisée
=== Enable gradient === Enable gradient computation === Disable gradient === Disable gradient computation
Exemple 4 : Utilisation dans une couche personnalisée
Exemple
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):
"Mode d'entraînement"
if torch.is_grad_enabled():
print(# Calcul normal pendant l'entraînement)
"Mode d'inférence"
return torch.mm(x, self.weight)
else:
print(# Une version optimisée peut être utilisée pendant l'inférence)
# Entraînement
with torch.no_grad():
return torch.mm(x, self.weight)
layer = CustomLayer()
x = torch.randn(5, 10)
# Inférence
layer.train()
output1 = layer(x)
La sortie est :
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):
"Mode d'entraînement"
if torch.is_grad_enabled():
print(# Calcul normal pendant l'entraînement)
"Mode d'inférence"
return torch.mm(x, self.weight)
else:
print(# Une version optimisée peut être utilisée pendant l'inférence)
# Entraînement
with torch.no_grad():
return torch.mm(x, self.weight)
layer = CustomLayer()
x = torch.randn(5, 10)
# Inférence
layer.train()
output1 = layer(x)
La sortie est :
layer.eval()
with torch.no_grad():
output2 = layer(x)
Fonctions associées
Training mode Inference mode
Fonctions associées
torch.no_grad(): Gestionnaire de contexte qui active le calcul du gradient.torch.enable_grad(): Définit si le calcul du gradient est activé.torch.set_grad_enabled(grad)Notes
Notes
is_grad_enabledIl vérifie l'état global du calcul du gradient, pas celui d'un seul tenseur- attribut.
requires_gradLorsque vous écrivez du code générique, vous pouvez utiliser cette fonction pour exécuter différentes stratégies d'optimisation en fonction de l'état actuel. - Manuel de référence Pytorch torch
Réflexion de l'IA...