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_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.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.verbose neyin yazdırılacağına karar verir, varsayılan olarak bırakın (0).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 veautoBu 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.
callbacks=[EarlyStopping(patience=2)]Epochs verilmedikçe hiçbir etkisi olmadığını unutmayın model.fit(..., epochs=max_epochs).
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.
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.
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 varsapatience = 0).