Garfield
YZF Admin
Early stopping ne yapar?
TensorFlow ve Keras'ta early stopping, modelin doğrulama başarımı artık iyileşmediğinde eğitimi otomatik olarak durdurur. En yaygın kullanım,
val_loss değerini izlemek, belirli sayıda epoch boyunca iyileşme olmazsa eğitimi kesmek ve en iyi ağırlıkları geri yüklemektir. Böylece gereksiz eğitim adımları azalır ve modelin eğitim verisine aşırı uyum sağlama riski düşer.Early stopping tek başına modeli daha başarılı yapmaz; yalnızca seçtiğiniz izleme ölçütüne göre durma kararı verir. Bu nedenle doğrulama verisi ayırmanız ve
monitor seçimini amacınıza uygun yapmanız gerekir.En küçük çalışan örnek
Aşağıdaki varsayımsal örnekte 200 gözlem, 160 eğitim ve 40 doğrulama örneğine önceden ayrılır.
validation_data ile verilen doğrulama örnekleri ağırlık öğrenimine katılmaz. Gerçek bir projede bölmeyi zaman, grup ve veri üretim biçimine uygun tasarlayın.
Python:
import tensorflow as tf
import numpy as np
rng = np.random.default_rng(42)
x = rng.normal(size=(200, 20)).astype(np.float32)
y = (x[:, :3].sum(axis=1) > 0).astype(np.float32).reshape(-1, 1)
x_train, x_val = x[:160], x[160:]
y_train, y_val = y[:160], y[160:]
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(20,)),
tf.keras.layers.Dense(64, activation="relu"),
tf.keras.layers.Dense(1, activation="sigmoid")
])
model.compile(
optimizer="adam",
loss="binary_crossentropy",
metrics=["accuracy"]
)
early_stopping = tf.keras.callbacks.EarlyStopping(
monitor="val_loss",
patience=5,
min_delta=0.001,
mode="min",
restore_best_weights=True
)
history = model.fit(
x_train,
y_train,
validation_data=(x_val, y_val),
epochs=100,
batch_size=32,
callbacks=[early_stopping],
verbose=1
)
Bu kodda
epochs=100 üst sınırdır; modelin mutlaka 100 epoch çalışacağı anlamına gelmez. val_loss, callback’in tuttuğu en iyi değere göre min_delta eşiğini aşan bir iyileşme göstermeden 5 epoch geçerse eğitim durur. restore_best_weights=True, callback’in bu kurala göre seçtiği epoch’un ağırlıklarını geri yükler. min_delta=0.001 nedeniyle bu epoch, geçmişteki mutlak en küçük val_loss değerinin epoch’uyla her zaman aynı olmayabilir.Ayarları doğru seçme
monitor değeri, Keras'ın eğitim geçmişinde gerçekten üretilen bir ölçüt olmalıdır. Doğrulama kaybı için val_loss, doğrulama başarımı için genellikle val_accuracy kullanılır. Dengesiz sınıflarda yalnızca doğruluk yerine uygun bir metrik kullanmanız gerekebilir; örneğin modeliniz AUC üretiyorsa izleme adı val_auc olabilir.mode="min" kaybın azalmasını, mode="max" ise başarım metriğinin artmasını bekler. auto çoğu standart ad için uygun yönü tahmin eder; ancak özel metriklerde yönü açıkça yazmak daha güvenlidir.patience, iyileşme görülmeden beklenecek epoch sayısıdır. Çok düşük bir değer, geçici dalgalanma nedeniyle eğitimi erken kesebilir. Çok yüksek bir değer ise erken durdurmanın zaman kazancı sağlamasını engeller. min_delta, iyileşme sayılması için gereken en küçük değişimi belirler.Kayıtları ve sonucu kontrol etme
Eğitimin hangi epoch'ta durduğunu ve en iyi değerin ne olduğunu
history.history içinden inceleyebilirsiniz:
Python:
# Mutlak minimum, min_delta nedeniyle geri yüklenen epoch’tan farklı olabilir.
best_epoch = min(
range(len(history.history["val_loss"])),
key=lambda i: history.history["val_loss"][i]
) + 1
print("Eğitim epoch sayısı:", len(history.history["loss"]))
print("Mutlak minimum val_loss epoch’u:", best_epoch)
print("En düşük val_loss:", history.history["val_loss"][best_epoch - 1])
Model 100 epoch'tan önce durmuşsa bu, doğrulama kaybının seçilen sabır süresi boyunca anlamlı biçimde iyileşmediğini gösterir. Bu durum modelin kesin olarak en iyi hâline ulaştığını kanıtlamaz; yalnızca seçtiğiniz doğrulama kümesi ve ölçüte göre daha fazla eğitimin yararlı görünmediğini gösterir. Eğitim çok erken duruyorsa
patience değerini artırın, min_delta değerini küçültün ve doğrulama kaybının gerçekten dalgalanıp dalgalanmadığını inceleyin.En iyi ağırlıkları dosyaya kaydetmek
restore_best_weights=True yalnızca eğitim sonunda bellekteki modeli geri yükler. En iyi modeli dosyaya kalıcı olarak yazmak istiyorsanız ModelCheckpoint ile birlikte kullanın:
Python:
checkpoint = tf.keras.callbacks.ModelCheckpoint(
"en_iyi_model.keras",
monitor="val_loss",
mode="min",
save_best_only=True
)
early_stopping = tf.keras.callbacks.EarlyStopping(
monitor="val_loss",
mode="min",
patience=5,
restore_best_weights=True
)
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val),
epochs=100,
callbacks=[early_stopping, checkpoint]
)
Burada early stopping eğitimin ne zaman duracağını, checkpoint ise ölçüt en iyi olduğunda hangi modeli dosyaya yazacağını belirler. Eğitim tamamlandıktan sonra
en_iyi_model.keras dosyasını yükleyerek aynı ağırlıklarla devam edebilirsiniz.Sık yapılan hatalar
- Doğrulama ölçütü üretmemek:
validation_dataveyavalidation_splitverilmezseval_lossgibi bir değer oluşmaz; bu durumda izlenecek ölçütü eğitimde gerçekten üretilen bir adla değiştirin. - Yanlış yön seçmek: Kayıp için
mode="min", başarı veya AUC gibi metrikler için genelliklemode="max"kullanılır. - Son ağırlıkları en iyi sanmak:
restore_best_weights=Falseise model son epoch'un ağırlıklarıyla kalabilir. En iyi ağırlıkları istiyorsanız bunu açıkçaTrueyapın veya checkpoint kullanın. - Doğrulama kümesini eğitimde kullanmak: Early stopping kararını doğrulama verisine göre verdiği için aynı küme model seçimi için kullanılır. Nihai başarıyı tarafsız ölçmek amacıyla ayrıca hiç kullanılmamış bir test kümesi ayırın.
Sık sorulan sorular
Early stopping eğitim kaybını mı, doğrulama kaybını mı izlemeli?
Genellikle
val_loss izlenmelidir; çünkü amaç yalnızca eğitim verisindeki iyileşmeyi değil, modelin görmediği doğrulama verisindeki genellemeyi takip etmektir. Eğitim kaybı düşmeye devam ederken doğrulama kaybı yükseliyorsa model aşırı uyum sağlamaya başlamış olabilir.Model hiç erken durmuyorsa ne kontrol edilmelidir?
Önce
history.history.keys() çıktısıyla izlediğiniz adın gerçekten üretildiğini kontrol edin. Ardından patience değerinin çok yüksek veya min_delta değerinin çok küçük olup olmadığını inceleyin. Çok küçük iyileşmeler anlamlı sayılıyorsa bekleme sayacı sık sıfırlanabilir; daha büyük min_delta ise iyileşme koşulunu zorlaştırır. Doğrulama kaybının hâlâ ilerleyip ilerlemediğine göre epoch üst sınırını değerlendirin.
Son düzenleme: