Penghentian awal pada dasarnya menghentikan pelatihan setelah kerugian Anda mulai meningkat (atau dengan kata lain keakuratan validasi mulai menurun). Menurut dokumen itu digunakan sebagai berikut;
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
Nilai tergantung pada implementasi Anda (masalah, ukuran batch, dll ...) tetapi secara umum untuk mencegah overfitting, saya akan menggunakan;
- Pantau kerugian validasi (perlu menggunakan validasi silang atau setidaknya set pelatihan / pengujian) dengan menyetel
monitor
argumen ke 'val_loss'
.
min_delta
adalah ambang untuk mengukur apakah kerugian pada beberapa periode sebagai perbaikan atau tidak. Jika selisih kerugian di bawah min_delta
, itu dihitung sebagai tidak ada perbaikan. Lebih baik biarkan 0 karena kita tertarik ketika kerugian menjadi lebih buruk.
patience
Argumen mewakili jumlah periode sebelum berhenti setelah kerugian Anda mulai meningkat (berhenti meningkat). Hal ini bergantung pada penerapan Anda, jika Anda menggunakan batch yang sangat kecil
atau kecepatan pemelajaran yang besar kerugian Anda zig-zag (akurasi akan lebih berisik) jadi lebih baik setel patience
argumen yang besar . Jika Anda menggunakan batch besar dan kecepatan pemelajaran kecil, kerugian Anda akan lebih lancar sehingga Anda dapat menggunakan patience
argumen yang lebih kecil . Bagaimanapun saya akan membiarkannya sebagai 2 jadi saya akan memberi model lebih banyak kesempatan.
verbose
memutuskan apa yang akan dicetak, biarkan default (0).
mode
Argumen tergantung pada arah mana kuantitas yang Anda pantau (apakah itu seharusnya menurun atau meningkat), karena kami memantau kerugian, kami dapat menggunakan min
. Tapi mari kita biarkan keras menangani itu untuk kita dan setel keauto
Jadi saya akan menggunakan sesuatu seperti ini dan bereksperimen dengan merencanakan kerugian kesalahan dengan dan tanpa penghentian awal.
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
Untuk kemungkinan ambiguitas tentang cara kerja callback, saya akan mencoba menjelaskan lebih lanjut. Setelah Anda memanggil fit(... callbacks=[es])
model Anda, Keras memanggil objek callback yang diberi fungsi yang telah ditentukan sebelumnya. Fungsi-fungsi ini dapat disebut on_train_begin
, on_train_end
, on_epoch_begin
, on_epoch_end
dan on_batch_begin
, on_batch_end
. Callback penghentian awal dipanggil pada setiap akhir epoch, membandingkan nilai terbaik yang dipantau dengan yang saat ini dan berhenti jika kondisi terpenuhi (berapa banyak epoch yang telah berlalu sejak pengamatan nilai terbaik yang dipantau dan apakah itu lebih dari argumen kesabaran, perbedaan antara nilai terakhir lebih besar dari min_delta dll ..).
Seperti yang ditunjukkan oleh @BrentFaust dalam komentar, pelatihan model akan berlanjut hingga kondisi Penghentian Awal terpenuhi atau epochs
parameter (default = 10) di fit()
terpenuhi. Menyetel callback Penghentian Awal tidak akan membuat model berlatih melampaui epochs
parameternya. Jadi memanggil fit()
fungsi dengan epochs
nilai yang lebih besar akan mendapatkan keuntungan lebih dari callback Penghentian Awal.
min_delta
adalah ambang untuk mengukur apakah perubahan nilai yang dipantau sebagai perbaikan atau tidak. Jadi ya, jika kami memberikanmonitor = 'val_loss'
maka itu akan mengacu pada perbedaan antara kerugian validasi saat ini dan kerugian validasi sebelumnya. Dalam prakteknya, jika Anda memberikanmin_delta=0.1
penurunan kerugian validasi (saat ini - sebelumnya) lebih kecil dari 0,1 tidak akan dihitung, sehingga akan menghentikan pelatihan (jika Anda punyapatience = 0
).callbacks=[EarlyStopping(patience=2)]
tidak berpengaruh, kecuali waktu diberikanmodel.fit(..., epochs=max_epochs)
.epoch=1
loop for (untuk berbagai kasus penggunaan) di mana callback ini akan gagal. Jika ada ambiguitas dalam jawaban saya, saya akan mencoba menjelaskannya dengan lebih baik.restore_best_weights
argumen (belum di dokumentasinya), yang memuat model dengan bobot terbaik setelah pelatihan. Tapi, untuk tujuan Anda, saya akan menggunakanModelCheckpoint
callback dengansave_best_only
argumen. Anda dapat memeriksa dokumentasinya, langsung digunakan tetapi Anda perlu memuat beban terbaik secara manual setelah pelatihan.