Epoch
Uma época é uma passagem completa do modelo pelos dados de treinamento. Veja a relação entre épocas, lotes e iterações e quantas épocas usar no treinamento.
Uma época é uma passagem completa de um modelo de aprendizado de máquina por todo o seu conjunto de dados de treinamento. Durante uma época, cada exemplo de treinamento contribui exatamente uma vez para as atualizações dos pesos do modelo. Modelos de aprendizado profundo raramente aprendem o suficiente em uma única passagem, então o treinamento é executado por muitas épocas, e o erro nos dados de treinamento normalmente diminui a cada época, à medida que a rede refina suas previsões.
Época vs. lote vs. iteração#
Três termos descrevem a estrutura de uma execução de treinamento, e cada um está contido no anterior:
- Época: uma passagem completa pelo conjunto de dados de treinamento.
- Lote: o grupo de exemplos processados juntos em uma etapa. Raramente os conjuntos de dados cabem de uma vez na memória da GPU, então cada época é dividida em lotes, geralmente depois de embaralhar os dados.
- Iteração: uma atualização dos pesos, feita depois que a função de perda é calculada para um lote e seus gradientes são propagados de volta por meio da retropropagação. "Etapa" é um sinônimo.
O número de iterações por época é igual ao tamanho do conjunto de dados dividido pelo tamanho do lote, arredondado para cima. Um conjunto de dados com 1.000 imagens e tamanho de lote 100 exige 10 iterações por época; assim, 50 épocas geram 500 atualizações dos pesos. No PyTorch, essa estrutura aparece como dois loops aninhados: um loop externo para as épocas e um interno para os lotes fornecidos por um 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 executa 10 iterações, e a perda no lote final cai de 0,1096 após a primeira época para 0,0088 após a quinta, à medida que o modelo converge para a linha verdadeira. Quando o treinamento usa aumento de dados, cada época recebe uma versão recém-transformada de cada imagem, então as épocas seguintes acrescentam variedade em vez de repetir exatamente as mesmas imagens.
Como escolher o número de épocas#
A contagem de épocas é uma das principais configurações no ajuste de hiperparâmetros. Poucas épocas deixam o modelo com subajuste, ou seja, erro alto tanto nos dados de treinamento quanto nos dados de validação. Épocas demais levam ao sobreajuste, situação em que a perda de treinamento continua caindo enquanto a pontuação de validação estagna ou diminui, porque o modelo começou a memorizar os exemplos de treinamento. A quantidade adequada depende do tamanho do conjunto de dados, do tamanho do modelo, do cronograma da taxa de aprendizado e de o treinamento começar com pesos pré-treinados por meio de aprendizado por transferência. A escala também altera a resposta: conjuntos de dados pequenos de visão costumam ser treinados por centenas de épocas, enquanto os grandes modelos de linguagem veem boa parte dos dados menos de uma vez, e o GPT-3 completou 0,44 época com os dados filtrados do Common Crawl.
A parada antecipada automatiza essa escolha. O modelo é avaliado com dados de validação após cada época, o melhor checkpoint é mantido e o treinamento termina quando a pontuação de validação não melhora por um número definido de épocas, chamado paciência.
Cronogramas de treinamento baseados em épocas#
Além do ponto de parada, muitas configurações de treinamento mudam de acordo com um cronograma por época, como o aquecimento e o decaimento da taxa de aprendizado ou a intensidade do aumento de dados. No treinamento do Ultralytics YOLO, epochs e patience têm ambos o valor padrão 100, a taxa de aprendizado passa por aquecimento nas primeiras 3 épocas e o aumento de dados mosaic é desativado nas 10 épocas finais (close_mosaic=10), para que o modelo termine o treinamento com imagens semelhantes às entradas reais. A receita de treinamento do YOLO26 mostra como a quantidade varia conforme o tamanho do modelo: após 150 épocas de pré-treinamento com Objects365, o ajuste fino com COCO durou 245 épocas para o YOLO26n e 40 épocas para o YOLO26x.
from ultralytics import YOLO
# Carrega um modelo YOLO26n pré-treinado
model = YOLO("yolo26n.pt")
# Treina por 50 épocas: 50 passagens completas pelas imagens de treinamento do COCO8
results = model.train(data="coco8.yaml", epochs=50, imgsz=640)Durante essa execução, o treinador valida o modelo YOLO26 após cada época, sobrescreve last.pt a cada vez e salva best.pt sempre que a aptidão de validação, que corresponde ao mAP50-95 para detecção, atinge um novo máximo.










