Epoch
Una época es una pasada completa de un modelo por sus datos de entrenamiento. Descubre cómo se relacionan las épocas con los lotes y las iteraciones, y cuántas épocas debes entrenar.
Una época es una pasada completa de un modelo de aprendizaje automático por todo su conjunto de datos de entrenamiento. Durante una época, cada ejemplo de entrenamiento contribuye exactamente una vez a las actualizaciones de los pesos del modelo. Los modelos de aprendizaje profundo rara vez aprenden lo suficiente en una sola pasada, así que el entrenamiento se prolonga durante muchas épocas y el error en los datos de entrenamiento suele disminuir en cada una a medida que la red refina sus predicciones.
Época, lote e iteración#
Tres términos describen la estructura de una ejecución de entrenamiento, y cada uno se integra en el anterior:
- Época: una pasada completa por el conjunto de datos de entrenamiento.
- Lote: grupo de ejemplos procesados juntos en un paso. Los conjuntos de datos rara vez caben enteros en la memoria de la GPU, así que cada época se divide en lotes, normalmente después de barajar los datos.
- Iteración: una actualización de pesos, que se realiza después de calcular la función de pérdida de un lote y propagar sus gradientes hacia atrás mediante retropropagación. «Paso» es un sinónimo.
El número de iteraciones por época es el tamaño del conjunto de datos dividido por el tamaño del lote, redondeado hacia arriba. Un conjunto de datos de 1.000 imágenes con un tamaño de lote de 100 requiere 10 iteraciones por época, así que 50 épocas producen 500 actualizaciones de pesos. En PyTorch, esta estructura se representa mediante dos bucles anidados: un bucle externo sobre las épocas y otro interno sobre los lotes que proporciona un DataLoader.
import torch
from torch.utils.data import DataLoader, TensorDataset
torch.manual_seed(0)
# 1,000 noisy samples of the line y = 3x + 2, served in shuffled batches of 100
x = torch.rand(1000, 1)
y = 3 * x + 2 + 0.1 * torch.randn(1000, 1)
loader = DataLoader(TensorDataset(x, y), batch_size=100, shuffle=True)
model = torch.nn.Linear(1, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.5)
for epoch in range(5): # one epoch = one full pass over all 1,000 samples
for xb, yb in loader: # 1,000 / 100 = 10 iterations per epoch
loss = torch.nn.functional.mse_loss(model(xb), yb)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch + 1}: {len(loader)} iterations, last batch loss {loss.item():.4f}")Cada época incluye 10 iteraciones, y la pérdida del último lote baja de 0.1096 tras la primera época a 0.0088 tras la quinta, a medida que el modelo converge hacia la línea real. Cuando el entrenamiento utiliza aumento de datos, en cada época se ve una versión recién transformada de cada imagen, así que las épocas posteriores aportan variedad en vez de repeticiones exactas.
Cómo elegir el número de épocas#
El número de épocas es uno de los principales parámetros del ajuste de hiperparámetros. Si son muy pocas, el modelo presenta subajuste y un error elevado tanto en los datos de entrenamiento como en los datos de validación. Si son demasiadas, el modelo tiende al sobreajuste: la pérdida de entrenamiento sigue bajando, mientras que la puntuación de validación se estanca o disminuye porque el modelo empieza a memorizar los ejemplos de entrenamiento. El número adecuado depende del tamaño del conjunto de datos y del modelo, del calendario de la tasa de aprendizaje y de si el entrenamiento parte de pesos preentrenados mediante transferencia de aprendizaje. La escala también influye: los conjuntos de datos de visión pequeños suelen entrenarse durante cientos de épocas, mientras que los modelos de lenguaje grandes ven gran parte de sus datos menos de una vez, y GPT-3 completó 0,44 épocas con sus datos filtrados de Common Crawl.
La parada temprana automatiza la elección. El modelo se evalúa con datos de validación después de cada época, se conserva el mejor checkpoint y el entrenamiento termina cuando la puntuación de validación no mejora durante un número determinado de épocas, denominado paciencia.
Calendarios de entrenamiento basados en épocas#
Además del punto de parada, muchos parámetros de entrenamiento cambian según un calendario de épocas, como el calentamiento y el descenso de la tasa de aprendizaje o la intensidad del aumento de datos. En el entrenamiento de Ultralytics YOLO, epochs y patience tienen un valor predeterminado de 100, la tasa de aprendizaje se calienta durante las tres primeras épocas y el aumento de datos mosaico se desactiva en las últimas 10 épocas (close_mosaic=10), para que el modelo termine entrenándose con imágenes parecidas a las entradas reales. La receta de entrenamiento de YOLO26 muestra cuánto varía el número según el tamaño del modelo: tras 150 épocas de preentrenamiento con Objects365, el ajuste fino con COCO duró 245 épocas para YOLO26n y 40 para YOLO26x.
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# Entrena durante 50 épocas: 50 pasadas completas por las imágenes de entrenamiento de COCO8
results = model.train(data="coco8.yaml", epochs=50, imgsz=640)Durante esta ejecución, el entrenador valida el modelo YOLO26 después de cada época, sobrescribe last.pt cada vez y guarda best.pt cuando el rendimiento de validación, medido como mAP50-95 para la detección, alcanza un nuevo máximo.










