Erfahre, welche wichtige Rolle Rückrufe beim maschinellen Lernen spielen - Werkzeuge, die das Modelltraining überwachen, steuern und automatisieren, um die Genauigkeit, Flexibilität und Effizienz zu verbessern.
Rückrufe sind Funktionen oder Gruppen von Funktionen, die in bestimmten Phasen eines größeren Prozesses ausgeführt werden, z. B. beim Training eines Machine-Learning-Modells. Im Kontext von KI und ML bieten Callbacks einen leistungsstarken Mechanismus, um interne Zustände zu überwachen, das Verhalten der Trainingsschleife zu beeinflussen und Aktionen zu automatisieren, ohne den Kerncode des Trainingsframeworks zu verändern. Sie fungieren als Haken in der Trainingspipeline und ermöglichen es Entwicklern, benutzerdefinierte Logik an vordefinierten Punkten wie dem Anfang oder Ende einer Epoche, eines Stapels oder des gesamten Trainingsprozesses einzufügen.
Während des Modelltrainings treten verschiedene Ereignisse nacheinander auf: Das Training beginnt, ein Epoche beginnt, ein Stapel verarbeitet wird, eine Validierung stattfindet, eine Epoche endet und schließlich das Training abgeschlossen wird. Mit Callbacks kannst du bestimmte Aktionen auslösen, die an diese Ereignisse gebunden sind. Du könntest z. B. die Gewichte des Modells speichern, wenn sich die Validierungsgenauigkeit verbessert, Metriken in einem Visualisierungstool wie TensorBoardoder das Training vorzeitig beenden, wenn sich das Modell nicht mehr verbessert. Frameworks wie Keras und Bibliotheken wie die ultralytics
Python nutzen in hohem Maße Callbacks, um Flexibilität und Erweiterbarkeit zu bieten.
Die Ultralytics Trainings-Engine bietet ein System von Rückrufen, die an verschiedenen Punkten während des Trainings ausgelöst werden. Ausbildung, Validierung, Vorhersage, und exportieren Prozesse. Diese Ereignisse umfassen on_train_start
, on_epoch_end
, on_fit_epoch_end
(was die Validierung einschließt), on_batch_end
, on_train_end
und viele andere. Benutzer können benutzerdefinierte Callbacks definieren, um Aktionen wie detaillierte Protokollierung, das Senden von Benachrichtigungen oder die Interaktion mit Plattformen wie 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)
Callbacks ermöglichen zahlreiche nützliche Funktionen bei der ML-Modellentwicklung:
Callbacks sind grundlegend für die Erstellung flexibler, automatisierter und beobachtbarer Workflows für maschinelles Lernen und ermöglichen es Entwicklern, Trainingsprozesse effizient zu erweitern und anzupassen. Sie unterscheiden sich leicht von allgemeinen Software-Ereignislisten, da sie eng in die spezifischen Lebenszyklusphasen des ML-Trainings und der Auswertung integriert sind.