Callbacks, Checkpoints, EarlyStopping

Kategori: Deep Learning , 27 Nisan 2020 , JanFranco


Bir modeli train ederken, epoch değerini yüksek vermek demek, iyi bir sonuç alacağımız anlamına gelmez. Örneğin epoch değerini 100 verdiğimizde, en iyi sonuç 65-70 epoch arasında olabilir ve train devam ettikçe accuracy değerleri düşebilir. Bu durumda 65-70 epoch arasında modeli save edebiliriz. Böylece en iyi sonuç veren modeli kullanmış oluruz. Bu tür bir uygulama yapabilmek için keras kütüphanesindeki ModelCheckpoint methodunu kullanacağız. Örnek görelim:


from keras.callbacks import ModelCheckpoint

checkpoint = ModelCheckpoint("drive/ColabNotebooks/Models/", monitor = "val_loss", mode = "min", save_best_only = True, verbose = 1)

callbacks = [checkpoint]

history = model.fit(x_train, y_train, batch_size = 64, epochs = 3, verbose = 2, callbacks = callbacks, validation_data = (x_test, y_test))
ModelCheckpoint parametrelerini açıklayalım: İlk parametre, modelin nereye kaydedileceğidir. İkinci parametre hangi değerlere göre kaydedileceğidir. Burada validation loss yazdık. Yani validation loss değerlerine göre model kaydedilecek. Üçüncü parametre moddur. "min" diyerek, minimum validation loss değerlerini önemsediğimizi söyledik. save_best_only parametresini True yaparak, sadece en iyi değerlerde kaydedilmesini söyledik. verbose değerini de 1 yaparak, kaydedilme bilgilerinin ekrana basılmasını istedik. Buradaki değerler bize şunu söylemekte, modeli ilk epochta kaydet, eğer bir sonraki epochta validation loss değeri daha düşük olursa, tekrar kaydet. Eğer bir sonraki validation loss değeri daha yüksek çıkarsa kaydetme.

Bir modeli train ederken, sonuçlar gittikçe kötü gidiyorsa, modeli durdurabiliriz. Örneğin epoch değerini 200 olarak ayarladık. Her bir epochta işlemin 10 dakika sürdüğünü düşünelim. 100. epochtan sonra accuracy değerleri düşmeye başladı ve 200. epocha kadar yükselmedi. Bu durumda biz gereksiz yere çok fazla beklemiş oluruz. Bu durumun önüne EarlyStop uygulaması ile geçebiliriz. Uygulama için keras kütüphanesindeki EarlyStopping methodunu kullanacağız:


earlystop = EarlyStopping(monitor = "val_loss", min_delta = 0, patience = 3, verbose = 1, restore_best_weights = True)

callbacks = [earlystop, checkpoint]
EarlyStopping methodnunun parametrelerini açıklayalım: Monitor parametresi hangi değeri baz alacağımızdır. Min_delta parametresi, modelin durması için gereken değişim miktarıdır. Patience parametresi, modelin durması için kaç epoch boyunca sonucun iyiye gitmemesi gerektiğidir. Verbose parametresini açıklamıştık, restore_best_weights parametresi True veya False değerlerini alır. True değerini değerini verirsek, modelin en iyi halindeki ağırlıkları yani weightleri saklar ve kayıt esnasında onları kaydeder.

Son göreceğimiz işlem learning rate değerinin azaltılmasıdır. Belirleyeceğimiz epoch değeri boyunca sonuçlar iyiye gitmezse, learning rate değerini algoritma küçültecektir. Bu uygulama için ReduceLROnPlateau methodunu kullanacağız:


from keras.callbacks import ReduceLROnPlateau

reduce_lr = ReduceLROnPlateau(monitor = "val_loss", factor = 0.2, patience = 3, verbose = 1, min_delta = 0.0001)

callbacks = [earlystop, checkpoint, reduce_lr]
ReduceLROnPlateau methodunun parametrelerini açıklayalım: monitor parametresini artık biliyoruz, factor parametresi yeni learning rate değerinin nasıl oluşturulacağını belirler. Formul şu şekildedir, new_lr = lr * factor. Patience değeri, kaç epoch boyunca algoritmanın sabredeceğidir. Burada 3 değerini verdik yani sonuçlar iyi gitmemesine rağmen 3 epoch boyunca bekleyecek ve 3. epochtan sonra learning rate değeri düşecektir. Verbose parametresini de açıklamıştık. Min_delta parametresi, threshold değeridir yani eşik değerdir.

Burada bahsetmediğimiz bir çok callback uygulaması bulunuyor, CSVLogger, TensorBoard gibi. Daha çok uygulama için aşağıdaki orjinal keras dökümanını inceleyebilirsiniz:

https://keras.io/callbacks


Sonraki Yazı: Building LeNet Model
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın