Glosario

Devolución de llamada

Explora el papel esencial de las devoluciones de llamada en el aprendizaje automático: herramientas que supervisan, controlan y automatizan el entrenamiento de modelos para mejorar la precisión, la flexibilidad y la eficacia.

Entrena los modelos YOLO simplemente
con Ultralytics HUB

Saber más

Las retrollamadas son funciones o conjuntos de funciones que se ejecutan en etapas específicas durante la ejecución de un proceso mayor, como el entrenamiento de un modelo de aprendizaje automático. En el contexto de la IA y el ML, las retrollamadas proporcionan un potente mecanismo para supervisar estados internos, influir en el comportamiento del bucle de entrenamiento y automatizar acciones sin modificar el código central del marco de entrenamiento. Actúan como ganchos en el proceso de entrenamiento, permitiendo a los desarrolladores inyectar lógica personalizada en puntos predefinidos, como el principio o el final de una época, un lote o todo el proceso de entrenamiento.

Comprender las devoluciones de llamada en el aprendizaje automático

Durante el entrenamiento del modelo, ocurren varios acontecimientos secuencialmente: se inicia el entrenamiento, un época comienza, se procesa un lote, se produce la validación, finaliza una época y, por último, concluye el entrenamiento. Las llamadas de retorno te permiten desencadenar acciones específicas vinculadas a estos eventos. Por ejemplo, puede que quieras guardar los pesos del modelo siempre que mejore la precisión de la validación, registrar métricas en una herramienta de visualización como TensorBoardo detener el entrenamiento antes de tiempo si el modelo deja de mejorar. Marcos como Keras y bibliotecas como la ultralytics El paquete Python utiliza en gran medida las devoluciones de llamada para ofrecer flexibilidad y extensibilidad.

Devoluciones de llamada en Ultralytics

El motor de entrenamiento Ultralytics proporciona un sistema de retrollamadas que se activan en varios momentos del proceso de entrenamiento. formación, validación, prediccióny exportar procesos. Estos acontecimientos incluyen on_train_start, on_epoch_end, on_fit_epoch_end (que incluye la validación), on_batch_end, on_train_endy muchas otras. Los usuarios pueden definir retrollamadas personalizadas para realizar acciones como el registro detallado, el envío de notificaciones o la interacción con plataformas como Ultralytics HUB.

from ultralytics import YOLO
from ultralytics.engine.callbacks import BaseCallback

# Define a simple custom callback

class MyCallback(BaseCallback):
def on_epoch_end(self, trainer): # This code will run at the end of each epoch
print(f"Epoch {trainer.epoch + 1} finished.") # Example: Access metrics like validation loss
if trainer.metrics:
val_loss = trainer.metrics.get('val/loss', None) # Example metric key, adjust as needed
if val_loss is not None:
print(f"Validation loss: {val_loss:.4f}")

# Load a model

model = YOLO('yolov8n.yaml').load('yolov8n.pt') # build from YAML and transfer weights

# Initialize your callback

my_callback = MyCallback()

# Add the callback to the training process

# Note: Direct addition via API might vary; often done via configuration or extending Trainer

# For demonstration, assume a mechanism exists like adding to a list or overriding methods.

# In Ultralytics, callbacks are often managed internally or via specific integrations.

# A conceptual example of how one might use it if Trainer exposed callbacks directly:

# trainer.add_callback(my_callback) # Hypothetical method

# Train the model (the callback methods are triggered automatically by the Trainer)

# The actual mechanism involves the Trainer checking for registered callbacks for specific events.

try: # This is a simplified representation. Callbacks are typically integrated deeper. # We can simulate adding callback logic by overriding trainer methods or using signals if available. # The Ultralytics framework automatically handles registered internal and integration callbacks. # To add custom behaviour like this, you might need to modify the source or use provided extension points.
print("Training started (callback logic would be triggered internally)...") # Example: Manually trigger for demonstration if needed for testing callback logic # my_callback.on_epoch_end(trainer_mock_object)
results = model.train(data='coco128.yaml', epochs=3, imgsz=640) # Training triggers internal events
print("Training finished.")

except Exception as e:
print(f"An error occurred: {e}")

# Example of using an existing integration callback (e.g., TensorBoard)

# This is usually enabled via arguments or configuration:

# results = model.train(data='coco128.yaml', epochs=3, imgsz=640, tensorboard=True)


Aplicaciones en el mundo real

Las devoluciones de llamada permiten numerosas funcionalidades útiles durante el desarrollo de modelos ML:

  • Comprobación del modelo: Guardar automáticamente el modelo (o sólo sus pesos) periódicamente o siempre que mejore el rendimiento en un conjunto de datos de validación. Así te aseguras de no perder el progreso y puedes recuperar la mejor versión de tu modelo. Los frameworks suelen incorporar llamadas de retorno para ello.
  • Parada anticipada: Controlar una métrica específica (por ejemplo, la pérdida de validación o la precisión) y detener el proceso de entrenamiento si la métrica deja de mejorar durante un número predefinido de épocas (paciencia). Esto evita el sobreajuste y ahorra recursos informáticos.
  • Programación de la tasa de aprendizaje: Ajuste dinámico de la tasa de aprendizaje durante el entrenamiento. Por ejemplo, reducir la tasa de aprendizaje cuando se estabiliza la mejora del modelo puede ayudarle a converger más eficazmente.
  • Registro y visualización: Envío de registros y métricas (como pérdida y precisión) a herramientas de supervisión como TensorBoard o plataformas en la nube como Weights & Biases para la visualización en tiempo real y el seguimiento de experimentos. Ultralytics ofrece integraciones sin fisuras para W&B y Comet ML.
  • Monitorización de recursos: Seguimiento de la utilización del hardwareGPUuso de CPU , memoria) durante el entrenamiento para identificar cuellos de botella u optimizar la asignación de recursos, especialmente importante en entornos de computación en nube.

Las retrollamadas son fundamentales para crear flujos de trabajo de aprendizaje automático flexibles, automatizados y observables, permitiendo a los desarrolladores ampliar y personalizar los procesos de entrenamiento de forma eficiente. Se diferencian ligeramente de los escuchadores de eventos de software generales al estar estrechamente integrados en las etapas específicas del ciclo de vida del entrenamiento y la evaluación del ML.

Leer todo