# Geri Çağrılar

[TrainerCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.TrainerCallback), eğitim olaylarına (epoch başlangıcı, değerlendirme, eğitim sonu) bağlanarak eğitim durumunu veya kontrol akışını değiştirmek için kullanılır. Callback'ler, Trackio gibi deney izleyicilerine metrik kaydetmek, kaydetme ve değerlendirme zamanlamasını özelleştirmek veya diğer özel davranışları eklemek için kullanılır. Özellikleri birleştirmek için birden fazla callback'i üst üste yığabilirsiniz.

Callbacks, ileri geçiş gibi eğitim döngüsünün kendisini değiştiremez. [Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer)'ın hesapladıklarını değiştirmek için bunun yerine yöntemlerini [alt sınıflandırın](./trainer_customize).

Aşağıdaki şema, bir geri çağrının (callback) bağlanabileceği tüm olayları gösterir.

```md
on_train_begin
  └─ for each epoch:
      on_epoch_begin
      └─ for each step:
          on_step_begin
          ├─ for each gradient accumulation substep:
          │   on_substep_end
          on_pre_optimizer_step   ← after gradient clipping, before optimizer.step()
          on_optimizer_step       ← after optimizer.step()
          on_step_end
          └─ (conditionally):
              on_log
              on_evaluate
              on_save
      on_epoch_end
on_train_end
on_predict / on_prediction_step
on_push_begin
```

## Geri çağrı oluşturma

[TrainerCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.TrainerCallback) sınıfından türetin ve yukarıdaki şemadaki bir veya daha fazla olay yöntemini geçersiz kılın. Aşağıdaki örnek üç kancayı göstermektedir:

- `on_epoch_begin`, [TrainerState](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.TrainerState) içindeki mevcut epoch değerini (canlı bir değer) ve [TrainingArguments](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments) içindeki öğrenme oranını (statik bir değer) yazdırır.
- `on_step_end`, `**kwargs` üzerinden iletilen lr_scheduler'dan güncel öğrenme oranını okur ve eşiğin altına düştüğünde bir değerlendirme tetiklemek için [TrainerControl](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.TrainerControl) üzerinde `should_evaluate` değerini ayarlar (kontrol nesnelerinin tam listesi için bkz. [TrainerControl](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.TrainerControl)).
- `on_train_end`, en iyi metriği ve bu metriğin elde edildiği adımı yazdırır.

```python
from transformers import TrainerCallback

class EpochLoggerCallback(TrainerCallback):
    def __init__(self, lr_eval_threshold=1e-5):
        self.lr_eval_threshold = lr_eval_threshold

    def on_epoch_begin(self, args, state, control, **kwargs):
        print(f"Starting epoch {int(state.epoch) + 1}/{state.num_train_epochs} "
              f"(lr={args.learning_rate})")

    def on_step_end(self, args, state, control, **kwargs):
        lr_scheduler = kwargs.get("lr_scheduler")
        if lr_scheduler is not None:
            current_lr = lr_scheduler.get_last_lr()[0]
            if current_lr < self.lr_eval_threshold:
                control.should_evaluate = True

    def on_train_end(self, args, state, control, **kwargs):
        print(f"Training complete! Best metric: {state.best_metric} at step {state.best_global_step}")
```

Çağrıyı `callbacks` argümanında [Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer) ile kaydedin. Birden fazla çağrıyı bir liste olarak da iletebilirsiniz.

```python
trainer = Trainer(
    callbacks=[EpochLoggerCallback(lr_eval_threshold=1e-5)],
    ...,
)
```

## Yerleşik geri bildirimler

Transformers, varsayılan olarak etkin olan birkaç yerleşik geri çağrı (callback) içerir. Ek [entegre geri çağrılar](./main_classes/callback), [Trackio](https://huggingface.co/docs/trackio/en/index) gibi platformlara kayıt tutar.

### DefaultFlowCallback

[DefaultFlowCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.DefaultFlowCallback), [TrainingArguments](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments) içindeki `logging_strategy`, `eval_strategy` ve `save_strategy` değerlerine göre varsayılan günlük tutma, değerlendirme ve checkpoint zamanlamasını yönetir. Doğru adım veya epoch'ta ilgili `control` bayraklarını (`should_log`, `should_evaluate`, `should_save`) ayarlar. Ayrıca `global_step` `max_steps` değerine ulaştığında `should_training_stop` bayrağını da ayarlar.

Bu geri çağırmanın (callback) üzerine yazılması, loglama, değerlendirme veya kaydetme işlemlerinin *ne zaman* gerçekleşeceğini özelleştirmenin ana yoludur.

### ProgressCallback ve PrinterCallback

[Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer), [TrainingArguments](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments) içindeki [disable_tqdm](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments.disable_tqdm) alanına göre bu iki geri bildirim arasından otomatik olarak seçim yapar.

- [ProgressCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.ProgressCallback) varsayılan olarak kullanılır. Eğitim sırasında bir tqdm ilerleme çubuğu, değerlendirme veya tahmin sırasında ise ayrı bir çubuk görüntüler ve her `on_log` olayında en güncel metrikleri yazdırır. Dağıtık eğitim sırasında, mükerrer çıktıları önlemek için yalnızca ana işlemde çalışır.
- [PrinterCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.PrinterCallback), `disable_tqdm=True` kullanıldığında devreye girer. İlerleme çubuğu olmadan, her `on_log` olayında günlük sözlüğünü stdout'a yazdırır.

Bunları [remove_callback()](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer.remove_callback) ve [add_callback()](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer.add_callback) ile manuel olarak da değiştirebilirsiniz.

```py
from transformers import PrinterCallback

trainer = Trainer(...)
trainer.remove_callback(ProgressCallback)
trainer.add_callback(PrinterCallback)
```

### EarlyStoppingCallback

[EarlyStoppingCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.EarlyStoppingCallback), bir değerlendirme metriği iyileşmeyi durdurduğunda eğitimi sonlandırır. Her değerlendirme sonrasında, metrik `early_stopping_threshold` değerinden fazla iyileşip iyileşmediğini kontrol eder. Metrik, `early_stopping_patience` ardışık değerlendirmede iyileşmezse eğitim durdurulur.

[EarlyStoppingCallback](/docs/transformers/v5.23.0/tr/main_classes/callback#transformers.EarlyStoppingCallback) iki [TrainingArguments](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.TrainingArguments) gerektirir:

- izlenecek değerlendirme metriği olan `metric_for_best_model`
- `eval_strategy`, `"steps"` veya `"epoch"` üzerinde değerlendirme yapılıp yapılmayacağı

```py
from transformers import EarlyStoppingCallback

trainer = Trainer(
    ...,
    callbacks=[EarlyStoppingCallback(early_stopping_patience=3, early_stopping_threshold=0.001)],
)
```

## Sonraki adımlar

- Deneysel izleyicilere kayıt için kullanılabilen tüm [entegre geri bildirimleri](./main_classes/callback) görüntüleyin.
- [Trainer yöntemlerini alt sınıflandırma](./trainer_customize) kılavuzu, eğitim döngüsünün hesapladıklarını değiştirmeniz gerektiğinde [Trainer](/docs/transformers/v5.23.0/tr/main_classes/trainer#transformers.Trainer) yöntemlerini geçersiz kılma işlemini kapsar.

