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?
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:
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;
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'
.min_delta
bir dönemdeki bir kaybın gelişme olarak ölçülüp değerlendirilmeyeceğine ilişkin bir eşiktir. Kayıp farkı min_delta
düşü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.patience
argü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 patience
argü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 patience
argüman kullanabilirsiniz . Her iki durumda da onu 2 olarak bırakacağım, böylece modele daha fazla şans vereceğim.verbose
neyin yazdırılacağına karar verir, varsayılan olarak bırakın (0).mode
argü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_end
ve 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 epochs
parametresi (varsayılan = 10) karşılanana kadar devam edecektir fit()
. Bir Erken Durdurma geri araması ayarlamak, modelin epochs
parametresinin ötesinde eğitilmesini sağlamaz . Bu nedenle fit()
, daha büyük bir epochs
değere sahip işlev çağırmak , Erken Durdurma geri aramasından daha fazla fayda sağlayacaktır.
callbacks=[EarlyStopping(patience=2)]
Epochs verilmedikçe hiçbir etkisi olmadığını unutmayın model.fit(..., epochs=max_epochs)
.
epoch=1
baş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.
restore_best_weights
modeli 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 ModelCheckpoint
ile 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.
min_delta
izlenen 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.1
doğrulama kaybında (şimdiki - önceki) 0.1'den daha küçük bir azalma verirseniz, miktar belirlemez, bu nedenle eğitimi durdurur (eğer varsapatience = 0
).