Khám phá vai trò thiết yếu của lệnh gọi lại trong học máy—các công cụ giám sát, kiểm soát và tự động hóa quá trình đào tạo mô hình để cải thiện độ chính xác, tính linh hoạt và hiệu quả.
Callback là các hàm hoặc tập hợp các hàm được thực thi ở các giai đoạn cụ thể trong quá trình thực thi một quy trình lớn hơn, chẳng hạn như đào tạo mô hình học máy. Trong bối cảnh AI và ML, các callback cung cấp một cơ chế mạnh mẽ để giám sát các trạng thái nội bộ, ảnh hưởng đến hành vi của vòng lặp đào tạo và tự động hóa các hành động mà không cần sửa đổi mã cốt lõi của khuôn khổ đào tạo. Chúng hoạt động như các móc vào đường ống đào tạo, cho phép các nhà phát triển đưa logic tùy chỉnh vào các điểm được xác định trước như đầu hoặc cuối của một kỷ nguyên, lô hoặc toàn bộ quy trình đào tạo.
Trong quá trình đào tạo mô hình, nhiều sự kiện khác nhau diễn ra tuần tự: bắt đầu đào tạo, một thời đại bắt đầu, một lô được xử lý, xác thực diễn ra, một kỷ nguyên kết thúc và cuối cùng, quá trình đào tạo kết thúc. Các lệnh gọi lại cho phép bạn kích hoạt các hành động cụ thể liên quan đến các sự kiện này. Ví dụ, bạn có thể muốn lưu trọng số của mô hình bất cứ khi nào độ chính xác xác thực được cải thiện, hãy ghi số liệu vào một công cụ trực quan hóa như Bảng TensorBoardhoặc dừng đào tạo sớm nếu mô hình ngừng cải thiện. Các khuôn khổ như Keras và các thư viện như ultralytics
Python gói sử dụng nhiều lệnh gọi lại để cung cấp tính linh hoạt và khả năng mở rộng.
Các Ultralytics công cụ đào tạo cung cấp một hệ thống các cuộc gọi lại được kích hoạt tại nhiều thời điểm khác nhau trong đào tạo, xác thực, dự đoán, Và xuất khẩu các quá trình. Những sự kiện này bao gồm on_train_start
, on_epoch_end
, on_fit_epoch_end
(bao gồm xác thực), on_batch_end
, on_train_end
và nhiều thứ khác. Người dùng có thể xác định các lệnh gọi lại tùy chỉnh để thực hiện các hành động như ghi nhật ký chi tiết, gửi thông báo hoặc tương tác với các nền tảng như 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)
Các lệnh gọi lại cho phép thực hiện nhiều chức năng hữu ích trong quá trình phát triển mô hình ML:
Callback là cơ bản để tạo ra các quy trình học máy linh hoạt, tự động và có thể quan sát được, cho phép các nhà phát triển mở rộng và tùy chỉnh các quy trình đào tạo một cách hiệu quả. Chúng hơi khác so với các trình lắng nghe sự kiện phần mềm chung ở chỗ được tích hợp chặt chẽ vào các giai đoạn vòng đời cụ thể của đào tạo và đánh giá ML.