Callback
Uma função de callback é chamada pelo ciclo de treino em eventos definidos, como o fim de cada época, para acrescentar paragem antecipada, pontos de controlo ou registo.
Um callback é uma função passada a outro trecho de código, que a chama de volta quando ocorre um evento específico. Manipuladores de eventos em interfaces de usuário, funções de conclusão em código assíncrono e a função de comparação fornecida a uma rotina de ordenação são todos callbacks. Em frameworks de aprendizado profundo, os eventos são pontos do ciclo de treinamento, como o início do treinamento, o fim de cada lote ou época e o momento em que a validação termina. Os callbacks registrados para um evento são executados nesse ponto e têm acesso ao estado do trainer, permitindo que os usuários adicionem parada antecipada contra sobreajuste, salvamento de checkpoints, cronogramas da taxa de aprendizado ou registros sem editar o próprio ciclo.
Como os callbacks se conectam ao treinamento#
Um framework mantém uma lista de callbacks para cada evento nomeado e chama cada um deles quando o ciclo chega a esse evento, passando o objeto trainer ou model para que um callback possa ler métricas e alterar configurações. O Keras os reúne no módulo keras.callbacks, o PyTorch Lightning em subclasses de Callback, e o Transformers da Hugging Face em TrainerCallback. Os nomes dos métodos variam entre as bibliotecas, mas os eventos seguem o mesmo ciclo:
Como os callbacks são executados dentro do ciclo, eles também podem alterá-lo: um callback que define uma sinalização de parada encerra o treinamento após a época atual, e um que edita o otimizador altera todas as etapas seguintes. Os callbacks do mesmo evento são executados na ordem em que foram registrados, e os callbacks no nível de lote são executados milhares de vezes por época; por isso, tarefas lentas, como enviar arquivos, devem ficar nos eventos de nível de época. No treinamento distribuído, cada processo executa sua própria cópia do ciclo e dos callbacks, então callbacks de registro e salvamento de checkpoints geralmente atuam somente no processo principal, rank 0, para evitar gravar o mesmo arquivo a partir de várias GPUs.
Callbacks comuns de treinamento#
- Parada antecipada: Interrompe o treinamento quando uma métrica de validação não melhora por um número definido de épocas, chamado paciência, o que limita o sobreajuste e economiza recursos computacionais. O
EarlyStoppingdo Keras também pode restaurar os melhores pesos observados antes da parada. - Salvamento de checkpoints: Salva o modelo a cada época ou sempre que uma métrica monitorada melhora, para preservar os melhores pesos e permitir retomar uma execução interrompida por uma falha. O callback
BackupAndRestoredo Keras usa o estado salvo para retomar automaticamente uma execução interrompida. - Agendamento da taxa de aprendizado: Reduz a taxa de aprendizado quando uma métrica se estabiliza, como faz o
ReduceLROnPlateaudo Keras, ou segue um cronograma fixo, como o decaimento cosseno. - Rastreamento de experimentos: Envia perdas, métricas e imagens de amostra para ferramentas como TensorBoard, MLflow ou Weights & Biases após cada época.
- Ajuste de hiperparâmetros: envia a pontuação de cada época a um ajustador, como o Ray Tune, cujos escalonadores encerram antecipadamente os testes pouco promissores.
Como escrever um callback personalizado#
O Ultralytics YOLO dispara eventos nomeados durante o treinamento, a validação, a predição e a exportação, como on_train_epoch_end e on_fit_epoch_end; suas próprias integrações com MLflow, Comet, ClearML, TensorBoard e Ultralytics Platform são registradas como callbacks nesses eventos. Este callback lê o mAP50-95 de validação após cada época e interrompe uma execução do YOLO26 assim que ela atinge uma meta:
from ultralytics import YOLO
def stop_at_target(trainer):
"""Stop training once validation mAP50-95 reaches 0.6."""
score = trainer.metrics["metrics/mAP50-95(B)"]
print(f"Epoch {trainer.epoch + 1}: mAP50-95 {score:.3f}")
if score >= 0.6:
trainer.stop = True # the trainer ends the run after this epoch
model = YOLO("yolo26n.pt")
model.add_callback("on_fit_epoch_end", stop_at_target) # runs after each epoch's validation
model.train(data="coco8.yaml", epochs=20)O evento on_fit_epoch_end é disparado após o treinamento e a validação da época, portanto trainer.metrics já contém as pontuações dessa época. Definir trainer.stop faz o trainer sair do ciclo de épocas, executar a validação final habitual com os melhores pesos e salvar os resultados, assim como acontece quando o limite integrado patience é atingido.
Callbacks vs. hooks#
Essas duas palavras costumam designar a mesma coisa: no PyTorch Lightning, os métodos implementados por um callback são chamados de hooks. No próprio PyTorch, hooks de módulo registrados com register_forward_hook ou register_full_backward_hook se conectam à passagem direta ou reversa de uma única camada, em vez de a um evento do ciclo de treinamento; eles são usados para ler mapas de características para visualização ou para inspecionar e modificar gradientes durante a retropropagação.










