Callback
Geri çağırım, erken durdurma, kontrol noktaları veya günlük kaydı eklemek için eğitim döngüsünün her dönemin sonu gibi belirli olaylarda çağırdığı bir fonksiyondur.
Geri çağırım, belirli bir olay gerçekleştiğinde başka bir kod parçasının çağırması için o koda aktarılan işlevdir. Kullanıcı arayüzlerindeki olay işleyicileri, eşzamansız koddaki tamamlama işlevleri ve bir sıralama yordamına verilen karşılaştırma işlevi, geri çağırım örnekleridir. Derin öğrenme çatılarında olaylar; eğitimin başlaması, her dönemin veya yığının bitmesi ve doğrulamanın tamamlanması gibi eğitim döngüsündeki anlardır. Bir olaya kaydedilen geri çağırımlar, eğitici durumuna erişebilecekleri bu anlarda çalışır; böylece kullanıcılar döngünün kendisini düzenlemeden aşırı öğrenmeye karşı erken durdurma, kontrol noktası kaydetme, öğrenme hızı çizelgeleri veya günlük kaydı ekleyebilir.
Geri Çağırımlar Eğitime Nasıl Bağlanır#
Bir çatı, adlandırılmış her olay için bir geri çağırım listesi tutar ve döngü o olaya ulaştığında her birini çağırıp eğitici veya model nesnesini aktarır; böylece geri çağırım ölçümleri okuyabilir ve ayarları değiştirebilir. Keras, geri çağırımları keras.callbacks modülünde toplar; PyTorch Lightning, Callback alt sınıflarını kullanır; Hugging Face Transformers ise TrainerCallback kullanır. Yöntem adları kütüphanelere göre değişse de olaylar aynı döngüyü izler:
Geri çağırımlar döngünün içinde çalıştığı için döngüyü değiştirebilir de: durdurma bayrağını ayarlayan bir geri çağırım, geçerli dönemden sonra eğitimi bitirir; iyileştiriciyi düzenleyen bir geri çağırım ise sonraki tüm adımları değiştirir. Aynı olay için geri çağırımlar kaydedildikleri sırada çalışır ve yığın düzeyindeki geri çağırımlar dönem başına binlerce kez çalışır; bu nedenle dosya yükleme gibi yavaş işler dönem düzeyindeki olaylarda yapılmalıdır. Dağıtık eğitim sırasında her süreç döngünün ve geri çağırımlarının kendi kopyasını çalıştırır; bu yüzden günlük kaydı ve kontrol noktası geri çağırımları, birkaç GPU'nun aynı dosyayı yazmasını önlemek için genellikle yalnızca ana süreçte, yani 0. sırada çalışır.
Yaygın Eğitim Geri Çağırımları#
- Erken durdurma: Sabır adı verilen belirli sayıda dönem boyunca bir doğrulama metriği iyileşmediğinde eğitimi durdurur; böylece aşırı öğrenmeyi sınırlar ve işlem gücünden tasarruf sağlar. Keras'ın
EarlyStoppingözelliği, durmadan önce gördüğü en iyi ağırlıkları da geri yükleyebilir. - Kontrol noktası kaydetme: En iyi ağırlıkları korumak ve çöken bir çalıştırmanın devam edebilmesini sağlamak için modeli her dönemde veya izlenen bir metrik iyileştiğinde kaydeder. Keras'ın
BackupAndRestoregeri çağırımı, kesintiye uğramış bir çalıştırmayı otomatik sürdürmek için kaydedilmiş durumu kullanır. - Öğrenme hızı çizelgelemesi: Keras'ın
ReduceLROnPlateauözelliğinin yaptığı gibi, bir metrik durakladığında öğrenme hızını düşürür veya kosinüs azalışı gibi sabit bir çizelgeyi izler. - Deney takibi: Her dönemden sonra kayıpları, metrikleri ve örnek görüntüleri TensorBoard, MLflow veya Weights & Biases gibi araçlara gönderir.
- Hiperparametre ayarı: Her dönemin puanını, verimsiz denemeleri erken durduran zamanlayıcılara sahip Ray Tune gibi bir ayarlayıcıya bildirir.
Özel Geri Çağırım Yazma#
Ultralytics YOLO, eğitim, doğrulama, tahmin ve dışa aktarma sırasında on_train_epoch_end ve on_fit_epoch_end gibi adlandırılmış olayları tetikler; MLflow, Comet, ClearML, TensorBoard ve Ultralytics Platform için kendi entegrasyonları da bu olaylara geri çağırım olarak kaydedilir. Bu geri çağırım, her dönemden sonra doğrulama mAP50-95 değerini okur ve hedefe ulaşır ulaşmaz YOLO26 çalıştırmasını durdurur:
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)on_fit_epoch_end olayı, dönemin eğitim ve doğrulama işlemlerinden sonra tetiklenir; bu nedenle trainer.metrics o dönemin puanlarını zaten içerir. trainer.stop değerini ayarlamak, eğiticinin dönem döngüsünden çıkmasını, en iyi ağırlıklar üzerinde olağan son doğrulamayı çalıştırmasını ve yerleşik patience sınırına ulaşıldığında yaptığı gibi sonuçları kaydetmesini sağlar.
Geri Çağırımlar ve Hook'lar#
Bu iki sözcük çoğu zaman aynı şeyi ifade eder: PyTorch Lightning, bir geri çağırımın uyguladığı yöntemleri kanca olarak adlandırır. PyTorch içinde register_forward_hook veya register_full_backward_hook ile kaydedilen modül kancaları, bir eğitim döngüsü olayına değil tek bir katmanın ileri veya geri geçişine bağlanır; bu kancalar, görselleştirme için özellik haritalarını okumak veya geri yayılım sırasında gradyanları inceleyip değiştirmek için kullanılır.










