• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

PyTorch eğitiminde erken durdurma nasıl tasarlanır?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
Erken durdurmayı, eğitim kaybını değil doğrulama kümesindeki seçtiğiniz metriği izleyerek tasarlayın. Metrik belirli sayıda epoch boyunca anlamlı biçimde iyileşmezse eğitimi sonlandırın ve model ağırlıklarını en iyi doğrulama sonucunun alındığı noktaya geri yükleyin. Böylece hem gereksiz epoch’ları çalıştırmaz hem de son epoch’ta oluşabilecek aşırı öğrenmiş modeli kullanmazsınız.

İzlenecek ölçütü doğru seçin​


Erken durdurma için her epoch sonunda yalnızca eğitim sonucunu değil, modelin eğitim sırasında görmediği doğrulama kümesindeki sonucu ölçün. Sınıflandırmada genellikle doğrulama kaybı veya doğruluk; dengesiz sınıflarda ise F1, dengeli doğruluk ya da doğrudan uygulama hedefinize uygun başka bir ölçüt izlenebilir.

Doğrulama kaybını izliyorsanız düşük değer daha iyidir. Doğruluk veya F1 izleniyorsa yüksek değer daha iyidir. Bu yön bilgisi kodda açıkça belirtilmezse, model iyileşmesine rağmen eğitim yanlışlıkla durabilir.

Eğitim kaybını erken durdurma ölçütü yapmak çoğu durumda doğru değildir. Eğitim kaybı düşmeye devam ederken doğrulama kaybı yükseliyorsa model eğitim verisine fazla uyum sağlıyor olabilir.

Erken durdurma için temel ayarlar​


İyi bir tasarım en az şu dört kararı açıkça verir:
AyarNe işe yarar?Başlangıç yaklaşımı
İzlenen metrikModelin gerçekten iyileşip iyileşmediğini belirler.Doğrulama kaybı veya görev metriği
Sabır (patience)İyileşme olmadan kaç epoch daha bekleneceğini belirler.5-10 epoch ile başlayın
Anlamlı fark (min_delta)Çok küçük dalgalanmaları iyileşme saymayı engeller.Ölçüm ölçeğine göre küçük bir değer
En iyi ağırlıkları geri yüklemeSon modeli değil, en iyi doğrulama sonucundaki modeli korur.Etkinleştirilmesi önerilir
Bu ayarlar sabit kurallar değildir. Doğrulama metriğiniz gürültülüyse patience değerini artırın. Küçük değişiklikler pratikte önemsizse min_delta değerini büyütün. Çok yüksek patience gereksiz hesaplama yaptırabilir; çok düşük patience ise geçici dalgalanma yüzünden eğitimi erken kesebilir.

PyTorch için en küçük çalışır tasarım​


Aşağıdaki sınıf, doğrulama kaybını izleyen, kayıp azaldığında en iyi ağırlıkları saklayan ve belirlenen sabır süresi dolduğunda eğitimi durduran varsayımsal bir uygulamadır. min_delta, sabır sayacını sıfırlamak için kaybın son anlamlı iyileşme referansından ne kadar daha düşük olması gerektiğini belirler; fark bu eşiği aşmalıdır. Kod, geri yüklemek için gerçek en düşük kaybın ağırlıklarını ayrıca saklar; eşikten küçük bir düşüş de bu ağırlık kaydını günceller.

Python:
import copy
import torch


class EarlyStopping:
    def __init__(self, patience=5, min_delta=0.0):
        self.patience = patience
        self.min_delta = min_delta
        self.best_value = float("inf")
        self.reference_value = float("inf")
        self.bad_epochs = 0
        self.best_state = None

    def step(self, validation_loss, model):
        # Geri yükleme için gerçek en düşük kaybı her zaman sakla.
        if validation_loss < self.best_value:
            self.best_value = validation_loss
            self.best_state = copy.deepcopy(model.state_dict())

        # Sabır sayacı ayrı bir anlamlı iyileşme referansı kullanır.
        improved = validation_loss < self.reference_value - self.min_delta
        if improved:
            self.reference_value = validation_loss
            self.bad_epochs = 0
            return False

        self.bad_epochs += 1
        return self.bad_epochs >= self.patience

    def restore_best(self, model):
        if self.best_state is None:
            raise RuntimeError("Geri yüklenecek bir en iyi model bulunamadı.")
        model.load_state_dict(self.best_state)

Eğitim döngüsünde doğrulama aşamasını torch.no_grad() ile çalıştırın. Her epoch sonunda elde edilen doğrulama kaybını sınıfa verin. step() değeri True döndürdüğünde döngüden çıkın; ardından en iyi ağırlıkları geri yükleyin.

Python:
model = MyModel()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = torch.nn.CrossEntropyLoss()
early_stopping = EarlyStopping(patience=5, min_delta=1e-4)

for epoch in range(100):
    model.train()

    for inputs, targets in train_loader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        loss.backward()
        optimizer.step()

    model.eval()
    validation_total = 0.0
    validation_count = 0

    with torch.no_grad():
        for inputs, targets in validation_loader:
            outputs = model(inputs)
            loss = criterion(outputs, targets)
            batch_size = inputs.size(0)
            validation_total += loss.item() * batch_size
            validation_count += batch_size

    validation_loss = validation_total / validation_count
    should_stop = early_stopping.step(validation_loss, model)

    print(
        f"epoch={epoch + 1}, "
        f"validation_loss={validation_loss:.4f}, "
        f"bad_epochs={early_stopping.bad_epochs}"
    )

    if should_stop:
        print("Erken durdurma uygulandı.")
        break

early_stopping.restore_best(model)

Bu örnekte MyModel, train_loader ve validation_loader sizin model ve veri yükleyicilerinizdir. Doğrulama kümesinin eğitim döngüsünde ağırlık güncellememesi gerekir; aksi durumda izlediğiniz sonuç bağımsız bir doğrulama ölçümü olmaktan çıkar.

Sonucun doğru yorumlanması​


Eğitim erken durduğunda bu, modelin kesin olarak en iyi mümkün noktaya ulaştığını kanıtlamaz. Yalnızca seçtiğiniz doğrulama metriğinin belirlediğiniz sabır süresi boyunca yeterince iyileşmediğini gösterir. Model hâlâ yetersiz öğreniyorsa patience değerini artırmak, öğrenme oranını gözden geçirmek veya model kapasitesini değiştirmek gerekebilir.

En iyi doğrulama kaybı epoch 18’de, erken durma ise epoch 24’te gerçekleşmişse kullanılacak ağırlıklar epoch 18’den geri yüklenmelidir. Son epoch’un ağırlıkları otomatik olarak daha iyi değildir.

Doğrulama kaybı düşerken test sonucu kötüleşiyorsa doğrulama kümesine de fazla uyum sağlanmış olabilir. Test kümesini eğitim ve ayar seçimi sırasında kullanmayın; onu yalnızca son model değerlendirmesi için ayırın. Erken durdurma kararını test sonucuna göre tekrar tekrar değiştirmek test ölçümünün güvenilirliğini azaltır.

Sınıflandırma metriğini izlemek istediğinizde​


Doğruluk yerine F1 veya başka bir metriği izlemek istiyorsanız aynı mantığı koruyup karşılaştırma yönünü değiştirin. Yüksek değer daha iyiyse başlangıç değerini -inf yapmalı ve iyileşmeyi metric > best_value + min_delta biçiminde denetlemelisiniz. Kayıp ile metriği aynı karşılaştırma kuralında kullanmayın.

Modelinizde Dropout veya Batch Normalization varsa doğrulama sırasında model.eval(), ağırlık güncellemesi yapılan eğitim sırasında model.train() çağrısını kullanın. Aksi durumda doğrulama ölçümü eğitim davranışıyla karışabilir ve erken durdurma kararı istikrarsızlaşabilir.

Kontrol listesi​

  • Kararı eğitim değil doğrulama metriğine bağlayın.
  • Metrik yönünü açıkça belirleyin: kayıpta düşük, doğruluk ve F1’de yüksek değer iyidir.
  • Geçici dalgalanmalar için yeterli patience bırakın.
  • Önemsiz küçük değişimleri min_delta ile filtreleyin.
  • En iyi model durumunu derin kopyalayarak saklayın.
  • Eğitim bittiğinde veya erken durduğunda en iyi ağırlıkları geri yükleyin.
  • Test kümesini erken durdurma ayarı için kullanmayın.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst