عند تدريب شبكة عصبية على مجموعة تدريب ، يتم حساب معلمتين رئيسيتين لكفاءة التعلم - الخطأ ودقة التنبؤ - في مخرجات الشبكة العصبية. لهذا ، يتم استخدام وظيفة الخسارة ودقة القياس. تختلف هذه المقاييس اعتمادًا على المهمة (التصنيف أو تجزئة الصورة ، اكتشاف الكائن ، الانحدار). في Keras ، يمكننا تحديد وظيفة الخسارة الخاصة بنا ومقاييس الدقة لمهمتنا المحددة. سيتم مناقشة هذه الوظائف المخصصة في المقالة. من يهتم ، من فضلك ، تحت القط.
وظائف فقدان مخصص في Keras
على سبيل المثال ، لنفترض أننا بحاجة إلى تنفيذ دالة خطأ "متوسط خطأ متوسط" (MAE). يمكن تنفيذ وظيفة خسارة MAE المخصصة على النحو التالي:
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
هنا نستخدم وظائف sum ، arange ، mean و abs المحددة في Keras.
بنفس الطريقة ، يمكنك تحديد قياس الدقة الخاص بك. على سبيل المثال ، حدد قياس earth_movers_distance لمقارنة مدرجين بيانيين:
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)
لاستخدام مقاييس mae و earth_movers_distance الخاصة بنا ، نقوم باستيراد الوظائف المقابلة من وحدة منفصلة ونضيفها إلى معلمات الخسارة والمقاييس عند تجميع النموذج:
from utils.metrics import mae, earth_movers_distance loss = earth_movers_distance model.compile(optimizer=optimizer, loss=loss, metrics=[mae, "accuracy"])
تحميل نموذج Keras مع وظيفة خسارة مخصصة
عند تدريب نموذج في Keras ، يمكنك حفظ وزن النموذج في ملف h5 للتحميل اللاحق للنموذج المدرب في مرحلة التنبؤ. إذا استخدمنا وظائف الخسارة المخصصة ومقاييس الجودة ، فقد نواجه مشكلة. عندما نقوم بتحميل الأوزان المدربة من ملف h5 للنموذج باستخدام طريقة load_weights ، يمكننا الحصول على الخطأ التالي:
ValueError: Unknown loss function:earth_movers_distance
هذا خطأ مشهور في Keras (
كتبوا عنه في المستودع الرسمي على جيثب).
لحل المشكلة ، تحتاج إلى إضافة وظائف الخسارة المخصصة ومقاييس الجودة إلى Keras:
from keras.utils.generic_utils import get_custom_objects get_custom_objects().update({"earth_movers_distance": earth_movers_distance, "age_mae": age_mae})
هذا كل شيء الآن. حظا سعيدا للجميع ونراكم قريبا!