Transformers documentation

Hiperparametre araması

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Hiperparametre araması

Öğrenme oranı, parti boyutu ve epoch sayısı gibi hiperparametreler eğitim sonuçlarını önemli ölçüde etkiler. Trainer.hyperparameter_search(), farklı değer setleriyle birden fazla deneme çalıştırarak en iyi kombinasyonu bulur ve en iyisini döndürür.

Her deneme, model_init ile taze bir model başlatır, yeni hiperparametreler örnekler, tam bir eğitim döngüsü çalıştırır ve arama arka ucuna bir hedef bildirir. Arka uç, her hedefi bir sonraki denemeyi bilgilendirmek için kullanır. Tüm denemeler tamamlandıktan sonra, en iyi hiperparametreler bir ~trainer.utils.BestRun içinde döndürülür.

Bir modelin başlatılması

Her denemeyi önceki çalıştırmaların durumundan kaçınmak için taze bir modelle başlatın. model_init, her denemenin başında çağrılır ve yeni bir model örneği döndürür; böylece her deneme aynı başlangıç ağırlıklarından başlar.

from transformers import AutoModelForCausalLM

def model_init(trial):
    return AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B")

trainer = Trainer(
    model_init=model_init,
    args=args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)

model= ve model_init= parametrelerini birlikte geçirmeyin; aksi takdirde Trainer bir hata fırlatır.

Arama alanını tanımlayın

Arama uzayını tanımlayan bir fonksiyon oluşturun. Biçim, arka uca (backend) bağlıdır. hp_space fonksiyonu tanımlamazsanız, varsayılan arama learning_rate, num_train_epochs ve per_device_train_batch_size parametrelerini kapsar.

# install one of these hyperparam search backends
pip install optuna
pip install wandb
pip install ray[tune]
Optuna
Ray Tune
Weights & Biases

Optuna, hiperparametre optimizasyonu için hafif bir çerçevedir.

def hp_space(trial):
    return {
        "learning_rate": trial.suggest_float("learning_rate", 1e-6, 1e-4, log=True),
        "per_device_train_batch_size": trial.suggest_categorical("per_device_train_batch_size", [16, 32, 64, 128]),
    }

Aramayı çalıştır

Optimizasyon hedefini tanımlamak için isteğe bağlı bir compute_objective işlevi sağlayın. Varsayılan olarak mevcut ise eval_loss, değilse tüm metrik değerlerinin toplamı kullanılır. Bu yedek davranışa güvenmemek için açık bir işlev geçirin. Arama backend'i, hedefi verilen bir direction içinde n_trials çalıştırma üzerinde optimize eder.

def compute_objective(metrics):
    return metrics["eval_loss"]

best_run = trainer.hyperparameter_search(
    hp_space=hp_space,
    compute_objective=compute_objective,
    n_trials=30,               # how many trials to run
    direction="minimize",      # or "maximize" for metrics like accuracy/F1
    backend="optuna",          # "optuna", "ray", or "wandb"
)

hyperparameter_search(), hedef değerini ve en iyi hiperparametre kombinasyonunu içeren bir ~trainer.utils.BestRun döndürür.

best_run = trainer.hyperparameter_search(...)

best_run.objective        # 0.38  (best eval loss)
best_run.hyperparameters  # {"learning_rate": 5e-5, "num_train_epochs": 4, ...}

En iyi hiperparametreleri TrainingArguments uygulayın ve tam veri setinde yeniden eğitin.

Update on GitHub