Erken durdurma için hangi parametreler kullanılmalıdır?


103

Keras kullanarak projem için bir sinir ağı eğitiyorum. Keras, erken durdurma için bir işlev sağlamıştır. Erken durdurmayı kullanarak sinir ağımın aşırı uymasını önlemek için hangi parametrelerin gözlemlenmesi gerektiğini öğrenebilir miyim?

Yanıtlar:


164

erken durma

Erken durma, temelde, kaybınız artmaya başladığında (veya başka bir deyişle doğrulama doğruluğu azalmaya başladığında) eğitimi durdurmaktır. Belgelere göre şu şekilde kullanılır;

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')

Değerler uygulamanıza bağlıdır (sorun, parti boyutu vb.) Ama genellikle aşırı uyumu önlemek için kullanırdım;

  1. Bağımsız monitor değişkeni olarak ayarlayarak doğrulama kaybını izleyin (çapraz doğrulama veya en azından eğitim / test kümeleri kullanmanız gerekir) 'val_loss'.
  2. min_deltabir dönemdeki bir kaybın gelişme olarak ölçülüp değerlendirilmeyeceğine ilişkin bir eşiktir. Kayıp farkı min_deltadüşükse, iyileşme yok olarak ölçülür. Kaybın ne zaman kötüleştiğiyle ilgilendiğimiz için onu 0 olarak bırakmak daha iyidir.
  3. patienceargüman, kaybınız artmaya başladığında durmadan önceki dönemlerin sayısını temsil eder (gelişmeyi durdurur). Bu, uygulamanıza bağlıdır, çok küçük gruplar veya büyük bir öğrenme oranı kullanırsanız , kayıp zig-zag'ı (doğruluk daha gürültülü olacaktır), bu nedenle büyük bir patienceargüman daha iyi ayarlayın . Büyük gruplar kullanırsanız ve küçük bir öğrenme oranı kullanırsanız , kaybınız daha yumuşak olacaktır, böylece daha küçük bir patienceargüman kullanabilirsiniz . Her iki durumda da onu 2 olarak bırakacağım, böylece modele daha fazla şans vereceğim.
  4. verbose neyin yazdırılacağına karar verir, varsayılan olarak bırakın (0).
  5. modeargüman, izlenen miktarınızın hangi yönde olduğuna bağlıdır (azalıyor mu, artıyor mu), çünkü kaybı izlediğimiz için kullanabiliriz min. Ama hadi keras'ın bunu bizim için halletmesine izin verelim veauto

Bu nedenle, bunun gibi bir şey kullanırdım ve hata kaybını erken durdurarak ve durdurmadan çizerek deneylerdim.

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=2,
                              verbose=0, mode='auto')

Geri aramaların nasıl çalıştığına dair olası belirsizlik için, daha fazla açıklamaya çalışacağım. Aradığınızda kez fit(... callbacks=[es])modelinize, Keras fonksiyonları önceden belirlenmiş geri arama nesneleri verilen aramaları. Bu fonksiyonlar çağrılabilir on_train_begin, on_train_end, on_epoch_begin, on_epoch_endve on_batch_begin, on_batch_end. Erken durdurma geri araması her çağın sonunda çağrılır, en iyi izlenen değeri mevcut değerle karşılaştırır ve koşullar karşılanırsa durur (en iyi izlenen değerin gözlemlenmesinden bu yana kaç dönem geçmiş ve sabır argümanından daha fazlası mıdır? son değer min_delta vb. den büyüktür.).

@BrentFaust'un yorumlarda işaret ettiği gibi, modelin eğitimi, Erken Durdurma koşulları karşılanana veya epochsparametresi (varsayılan = 10) karşılanana kadar devam edecektir fit(). Bir Erken Durdurma geri araması ayarlamak, modelin epochsparametresinin ötesinde eğitilmesini sağlamaz . Bu nedenle fit(), daha büyük bir epochsdeğere sahip işlev çağırmak , Erken Durdurma geri aramasından daha fazla fayda sağlayacaktır.


3
@AizuddinAzman kapanış, min_deltaizlenen değerdeki değişikliğin bir iyileştirme olarak ölçülüp ölçülmemesi için bir eşiktir . Yani evet, eğer verirsek, monitor = 'val_loss'o zaman mevcut doğrulama kaybı ile önceki doğrulama kaybı arasındaki farka atıfta bulunacaktır. Pratikte, min_delta=0.1doğrulama kaybında (şimdiki - önceki) 0.1'den daha küçük bir azalma verirseniz, miktar belirlemez, bu nedenle eğitimi durdurur (eğer varsa patience = 0).
umutto

3
callbacks=[EarlyStopping(patience=2)]Epochs verilmedikçe hiçbir etkisi olmadığını unutmayın model.fit(..., epochs=max_epochs).
Brent Faust

1
@BrentFaust Benim de anladığım kadarıyla cevabı modelin en az 10 dönem (varsayılan olarak) eğitildiği varsayımına yazdım. Yorumunuzdan sonra, programcının bu geri aramanın epoch=1başarısız olacağı bir for döngüsünde (çeşitli kullanım durumları için) fit ile çağırdığı bir durum olabileceğini fark ettim . Cevabımda belirsizlik varsa daha iyi bir şekilde ifade etmeye çalışacağım.
umutto

4
@AdmiralWen Cevabı yazdığım için kod biraz değişti. Keras'ın en son sürümünü kullanıyorsanız, restore_best_weightsmodeli eğitimden sonra en iyi ağırlıklarla yükleyen bağımsız değişkeni (henüz belgelerde değil) kullanabilirsiniz . Ancak, amaçlarınız için argüman ModelCheckpointile geri aramayı kullanırdım save_best_only. Belgeleri kontrol edebilirsiniz, kullanımı basittir ancak eğitimden sonra en iyi ağırlıkları manuel olarak yüklemeniz gerekir.
umutto

1
@umutto Merhaba, restore_best_weights'ın önerisi için teşekkürler, ancak onu kullanamıyorum, `es = EarlyStopping (monitor = 'val_acc', min_delta = 1e-4, patience = patience_, verbose = 1, restore_best_weights = True) TypeError: __init __ () beklenmedik bir anahtar kelime argümanı 'restore_best_weights'` aldı. Herhangi bir fikir? keras 2.2.2, tf, 1.10 sizin sürümünüz nedir?
Haramoz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.