Propagação direta: da entrada à predição

2 min

Objetivo: acompanhar o cálculo de uma rede e distinguir treinamento e inferência.

A propagação direta (forward pass) aplica cada camada na ordem. Ela produz os logits e, em seguida, a perda se os alvos estiverem disponíveis. Ela não modifica nenhum peso.

python
logits = model(x)          # propagação direta
loss = criterion(logits, y)

Para um batch x de forma (32, 20), uma camada Linear(20, 64) fornece (32, 64). Uma segunda Linear(64, 4) fornece (32, 4). O eixo do batch é conservado; o último eixo muda conforme a camada.

Treinamento e inferência

Em treinamento, a rede conserva as informações necessárias ao cálculo dos gradientes. Em inferência, desativamos esse rastreamento e colocamos o modelo em modo de avaliação:

python
model.eval()
with torch.inference_mode():
    logits = model(x)
    predictions = logits.argmax(dim=1)

model.eval() regula o comportamento de Dropout e BatchNorm. inference_mode() evita a construção do grafo de gradiente. As duas operações são complementares.

Um cálculo rastreável

Uma rede é um grafo de operações. O PyTorch memoriza quais operações produziram cada tensor quando requires_grad=True. Esse rastro será percorrido em sentido inverso pela retropropagação.

Armadilhas

  • Usar argmax antes da função de perda: a operação destrói a informação útil ao gradiente.
  • Esquecer model.eval() durante a validação.
  • Calcular a validação com rastreamento de gradientes e desperdiçar memória.

Verificação rápida

A propagação direta aprende? Por que chamar ao mesmo tempo eval() e inference_mode()?

Respostas

Não, ela calcula. eval() muda certas camadas; inference_mode() desativa o grafo de gradiente.

Atividade de domínio — Contrato de inferência

Escreva um pseudoteste que chama duas vezes o mesmo modelo contendo dropout, primeiro em modo de treinamento e depois em modo de avaliação. Preveja quais resultados devem ser idênticos e explique o papel distinto de eval() e inference_mode(). Entregável: teste e diagnóstico.

Treinamento e inferência: dois percursos distintos

Leitura: a propagação direta calcula as saídas nos dois casos, mas apenas o percurso de treinamento conserva o que é necessário ao cálculo dos gradientes. Em inferência, combine model.eval() e torch.inference_mode(). A armadilha é acreditar que um substitui o outro: eles controlam mecanismos diferentes.