Autograd
O autograd do PyTorch calcula automaticamente os gradientes de saídas escalares em relação às entradas de tensor. Ele impulsiona todo o treinamento de redes neurais através da diferenciação automática no modo reverso.
Busque em todas as páginas da documentação
O autograd do PyTorch calcula automaticamente os gradientes de saídas escalares em relação às entradas de tensor. Ele impulsiona todo o treinamento de redes neurais através da diferenciação automática no modo reverso.
Cartão de receita de referência rápida - pronto para copiar e colar.
import torch
x = torch.tensor(2.0, requires_grad=True)
y = x ** 2 + 3 * x
y.backward()
print(x.grad) # dy/dx em x=2: 2*2+3 = 7
# Inferência: sem rastreamento de gradiente
with torch.no_grad():
pred = model(x)Quando usar isso:
loss.backward() e optimizer.step() funcionam."""autograd.py - cálculo de gradiente e verificação de gradiente."""
import torch
import torch.nn as nn
# Grafo computacional simples
w = torch.tensor([1.0, 2.0], requires_grad=True)
b = torch.tensor(0.5, requires_grad=True)
x = torch.tensor([3.0, 4.0])
# Forward: y = w . x + b, loss = y^2
y = (w * x).sum() + b
loss = y ** 2
loss.backward()
print("w.grad:", w.grad) # d(loss)/dw
print("b.grad:", b.grad) # d(loss)/db
# Modelo com autograd
model = nn.Linear(3, 1)
x_batch = torch.randn(16, 3)
target = torch.randn(16, 1)
model.zero_grad(set_to_none=True)
pred = model(x_batch)
loss = nn.functional.mse_loss(pred, target)
loss.backward()
for name, param in model.named_parameters():
print(f"{name}: grad norm = {param.grad.norm().item():.4f}")O que isso demonstra:
w, b) acumulam gradientes em .grad.loss.backward() percorre o grafo em reverso.zero_grad(set_to_none=True) limpa os gradientes de forma eficiente.backward() aplica a regra da cadeia da saída de volta para as folhas.requires_grad=True acumulam .grad.retain_graph=True.torch.inference_mode() é mais rigoroso e rápido que no_grad() para inferência.| Contexto | Efeito | Uso |
|---|---|---|
requires_grad=True | Rastreia operações | Parâmetros do modelo, entradas que precisam de gradiente |
torch.no_grad() | Desabilita rastreamento | Inferência, cálculo de métricas |
torch.inference_mode() | no-grad mais rigoroso | Inferência em produção |
.detach() | Desconecta do grafo | Interrompe gradientes através de um tensor |
retain_graph=True | Mantém o grafo após o backward | Múltiplas chamadas de backward |
# Função autograd personalizada
class MyReLU(torch.autograd.Function):
@staticmethod
def forward(ctx, input):
ctx.save_for_backward(input)
return input.clamp(min=0)
@staticmethod
def backward(ctx, grad_output):
input, = ctx.saved_tensors
grad_input = grad_output.clone()
grad_input[input < 0] = 0
return grad_inputzero_grad() - gradientes se acumulam entre as etapas. Correção: chame optimizer.zero_grad(set_to_none=True) antes de cada backward.loss.backward(retain_graph=True) ou passes forward separados.x.add_(1) em tensores rastreados; use x = x + 1..item() para log; del loss após o backward..detach().cpu().numpy() para exportação.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| PyTorch autograd | Padrão para redes neurais | Você precisa de matemática simbólica (use JAX) |
torch.func (functorch) | Gradientes por amostra, vmap | Treinamento simples de modelo |
| Gradientes manuais | Ensino, verificação | Código de modelo em produção |
| JAX autograd | Transformações funcionais, TPU | Ecossistema PyTorch existente |
backward() calcula gradientes de uma saída escalar.y.backward(gradient=torch.ones_like(y)).inference_mode desabilita mais infraestrutura de autograd - mais rápido.inference_mode para inferência em produção.no_grad é aceitável para loops de validação durante o treinamento.for name, p in model.named_parameters():
if p.grad is None:
print(f"no grad: {name}")param.requires_grad = False ou padrões model.freeze().torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)optimizer.step().loss.backward(create_graph=True)
grad_grad = torch.autograd.grad(loss, model.parameters(), create_graph=True)create_graph=True mantém o grafo para gradientes de ordem superior.optimizer.zero_grad(set_to_none=True) define .grad como None em vez de zero..grad preenchido por padrão.retain_grad() em tensores não folha, se necessário.with torch.no_grad():
features = frozen_encoder(x)
output = trainable_head(features)Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026