حل مشكلة التحذير: تفسير invalid value encountered in log في دالة Cross-Entropy باستخدام Python
عند تنفيذ الكود الخاص بك، يظهر تحذير يشير إلى “invalid value encountered in log”، وهو تحذير يتم إصداره عند محاولة حساب لوغاريتم القيمة الصفرية أو السالبة. في هذا السياق، يحدث هذا الخطأ عندما يكون الوسط (argument) الذي يتم إرساله إلى دالة اللوغاريتم في بعض الحالات خارج نطاق القيم المسموح به.
لفهم هذه المشكلة بشكل أفضل، دعونا نحلل الكود الخاص بك. تستخدم دالة اللوغاريتم في حساب تكلفة الانحدار عبر الإنتروبيا الصليبية. يتم ذلك بواسطة الجزء التالي من الكود:
pythonnp.sum(np.nan_to_num(-y*np.log(a+ 1e-7)-(1-y)*np.log(1-a+ 1e-7)))
حيث يتم استخدام np.nan_to_num
لتحويل أي NaNs إلى أصفار. السبب وراء إضافة 1e-7
إلى القيم داخل اللوغاريتم هو تجنب القيم الصفرية التي قد تؤدي إلى تعطيل عملية اللوغاريتم.
تظهر المشكلة عندما تكون القيمة داخل اللوغاريتم سالبة أو تساوي صفر، وهذا يحدث عندما تكون قيمة a
في المجموعة (0, 1) بحيث تكون 1 - a
أو a
تساوي صفر. في هذه الحالة، سيكون لديك تكرار لوغاريتم لقيمة سالبة أو صفر.
لتجنب هذا التحذير، يمكنك تحسين الكود بالتأكد من أن قيم a
و (1-a)
داخل اللوغاريتم تكون في نطاق صالح. يمكنك استخدام np.clip
لتأمين القيم في النطاق المسموح به، على سبيل المثال:
pythonlog = np.sum(np.nan_to_num(-y*np.log(np.clip(a, 1e-10, 1-1e-10)) - (1-y)*np.log(np.clip(1-a, 1e-10, 1-1e-10))))
هذا يضمن أن القيم داخل اللوغاريتم لن تكون أقل من 1e-10
أو أكبر من 1-1e-10
، مما يمنع القيم الصفرية أو السالبة.
المزيد من المعلومات
بهدف فهم المشكلة بعمق، يمكننا النظر في بنية ومفهوم الدالة التكلفة Cross-Entropy وكيف يتم حسابها في هذا السياق.
دالة التكلفة Cross-Entropy هي واحدة من الدوال الشائعة المستخدمة في تقييم أداء نماذج التصنيف، خاصةً في حالات تصنيف الفئات الثنائية. الصيغة العامة لل Cross-Entropy تكون كالتالي:
J(y,a)=−m1∑i=1m(yilog(ai)+(1−yi)log(1−ai))
حيث:
- m هو عدد النقاط في البيانات.
- yi هو القيمة الحقيقية للفئة للنقطة i.
- ai هو القيمة المتوقعة (الإخراج النموذج) للنقطة i.
التعبير الذي قدمه المستخدم هو مشتق من هذه الصيغة، وقد أضاف 1e-7
داخل اللوغاريتم لتجنب مشكلة القيم الصفرية. ومع ذلك، قد يحدث تحذير “invalid value encountered in log” عندما تكون القيمة داخل اللوغاريتم سالبة أو NaN.
لمعالجة هذه المشكلة، ينبغي مراجعة بيانات الإدخال (y
و a
) والتحقق من سلامة القيم المتوقعة. يمكن أيضًا فحص القيم المتوقعة بعد تشغيل النموذج لفهم الأسباب المحتملة والتحقق من صحتها. استكشاف مخرجات النموذج ومدى توافقها مع التوقعات يمكن أن يساعد في تحديد مصدر المشكلة وتصحيحه.