Ketika melatih jaringan saraf pada set pelatihan, dua parameter utama efisiensi pembelajaran - kesalahan dan akurasi prediksi - dihitung pada output jaringan saraf. Untuk ini, fungsi kerugian dan metrik akurasi digunakan. Metrik ini berbeda tergantung pada tugas (klasifikasi atau segmentasi gambar, deteksi objek, regresi). Di Keras, kita dapat menentukan fungsi kerugian dan metrik akurasi kita sendiri untuk tugas spesifik kita. Fungsi khusus tersebut akan dibahas dalam artikel. Siapa yang peduli, tolong, di bawah kucing.
Fungsi kehilangan kustom di Keras
Sebagai contoh, misalkan kita perlu mengimplementasikan fungsi kesalahan Mean Average Error (MAE). Fungsi kehilangan MAE kustom dapat diimplementasikan sebagai berikut:
from keras import backend as K def mae(y_true, y_pred): true_value = K.sum(y_true * K.arange(0, 100, dtype="float32"), axis=-1) pred_value = K.sum(y_pred * K.arange(0, 100, dtype="float32"), axis=-1) mae = K.mean(K.abs(true_value - pred_value)) return mae
Di sini kita menggunakan fungsi penjumlahan, susut, rata-rata, dan abs yang didefinisikan dalam Keras.
Dengan cara yang sama, Anda dapat menentukan metrik akurasi Anda. Misalnya, tentukan metrik earth_movers_distance untuk membandingkan dua histogram:
from keras import backend as K def earth_movers_distance(y_true, y_pred): cdf_true = K.cumsum(y_true, axis=-1) cdf_pred = K.cumsum(y_pred, axis=-1) emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1)) return K.mean(emd)
Untuk menggunakan metrik mae dan earth_movers_distance kami, kami mengimpor fungsi yang sesuai dari modul terpisah dan menambahkannya ke parameter kehilangan dan metrik saat menyusun model:
from utils.metrics import mae, earth_movers_distance loss = earth_movers_distance model.compile(optimizer=optimizer, loss=loss, metrics=[mae, "accuracy"])
Memuat model Keras dengan fungsi kehilangan kustom
Saat melatih model dalam Keras, Anda dapat menyimpan bobot model dalam file h5 untuk memuat model yang dilatih berikutnya pada tahap prediksi. Jika kami menggunakan fungsi kehilangan kustom dan metrik kualitas, maka kami mungkin mengalami masalah. Ketika kita memuat bobot terlatih dari file h5 untuk model menggunakan metode load_weights, kita bisa mendapatkan kesalahan berikut:
ValueError: Unknown loss function:earth_movers_distance
Ini adalah bug terkenal di Keras (
mereka menulisnya di repositori resmi di github).
Untuk mengatasi masalah, Anda perlu menambahkan fungsi kehilangan kustom dan metrik kualitas ke Keras:
from keras.utils.generic_utils import get_custom_objects get_custom_objects().update({"earth_movers_distance": earth_movers_distance, "age_mae": age_mae})
Itu saja untuk saat ini. Semoga beruntung untuk semua orang dan sampai jumpa lagi!