Propagación hacia adelante: de la entrada a la predicción

2 min

Objetivo: seguir el cálculo de una red y distinguir entrenamiento e inferencia.

La propagación hacia adelante (forward pass) aplica cada capa en orden. Produce los logits y, después, la pérdida si los objetivos están disponibles. No modifica ningún peso.

python
logits = model(x)          # propagación hacia adelante
loss = criterion(logits, y)

Para un batch x de forma (32, 20), una capa Linear(20, 64) da (32, 64). Una segunda Linear(64, 4) da (32, 4). El eje batch se conserva; el último eje cambia según la capa.

Entrenamiento e inferencia

En entrenamiento, la red conserva la información necesaria para el cálculo de los gradientes. En inferencia, se desactiva ese seguimiento y se coloca el modelo en modo evaluación:

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

model.eval() ajusta el comportamiento de Dropout y BatchNorm. inference_mode() evita la construcción del grafo de gradiente. Las dos operaciones son complementarias.

Un cálculo trazable

Una red es un grafo de operaciones. PyTorch memoriza qué operaciones produjeron cada tensor cuando requires_grad=True. Esa traza será recorrida en sentido inverso por la retropropagación.

Trampas

  • Utilizar argmax antes de la función de pérdida: la operación destruye la información útil para el gradiente.
  • Olvidar model.eval() durante la validación.
  • Calcular la validación con seguimiento de gradientes y desperdiciar memoria.

Comprobación rápida

¿La propagación hacia adelante aprende? ¿Por qué llamar a la vez a eval() y a inference_mode()?

Respuestas

No, calcula. eval() cambia ciertas capas; inference_mode() desactiva el grafo de gradiente.

Actividad de dominio — Contrato de inferencia

Escribe una pseudoprueba que llame dos veces al mismo modelo con dropout, primero en modo entrenamiento y luego en modo evaluación. Predice qué resultados deben ser idénticos y explica el papel distinto de eval() e inference_mode(). Entregable: prueba y diagnóstico.

Entrenamiento e inferencia: dos recorridos distintos

Lectura: la propagación hacia adelante calcula las salidas en ambos casos, pero solo el recorrido de entrenamiento conserva lo necesario para el cálculo de los gradientes. En inferencia, combina model.eval() y torch.inference_mode(). La trampa es creer que uno reemplaza al otro: controlan mecanismos diferentes.