رأينا في المقالة السابقة كيف بنينا مودل model يقوم على تصنيف الارقام الموجودة في الصور من 0 الى 9 بناء على الخصائص المتوفرة في كل صورة رقم. يعني مثل رقم 0 يحتوى خطوط تدور حول بعضها البعض وهكذا. وكل رقم له خصائص مختلفة عن الارقام الاخرى.واستخدمنا قاعدة بيانات معروفة وهيا MNIST. تحتوي MNIST على صور مختلفة للارقام المكتوبة بخط اليد. يعني مدخلات الشبكة حتكون الصور التي تحتوي على الارقام والمخرجات حتكون صور الارقام ولكن كل صورة مربوطة بالرقم الصحيحة. يعني الصورة رقم ٦ توقع المودل يجب ان يكون الصورة التي تحتوي رقم ٦
بناء على الخصائص التي تعلمها من خلال convolutional layer. واتكلمنا بالتفصيل عن model وشفنا كيف اعطانا دقة مودل عالية وهيا 98%. تقدر ترجع للمقالة من هنا وتفهم المشروع قبل تكمل هذه المقالة.
في مقالة هذه اليوم حنستدعي المودل model الذي دربناه وحفظناه على قوقل درايف google drive في المقالة السابقة. ايضا حنتأكد ان دقة المودل عالية كما دربناه سابقا. ومن ثم اخيرا حنفهم توقعات المودل باستخدام SHAP explainer وحنرى ذلك بالتفصيل.
في مقالة هذه اليوم حنستدعي المودل model الذي دربناه وحفظناه على قوقل درايف google drive في المقالة السابقة. ايضا حنتأكد ان دقة المودل عالية كما دربناه سابقا. ومن ثم اخيرا حنفهم توقعات المودل باستخدام SHAP explainer وحنرى ذلك بالتفصيل.
ربط ملف Google Colab للمشروع ب Google drive
لماذا؟ حتى نستطيع تحميل المودل المدرب trained model من المقالة السابقة. نشوف الكود التالي:
شغل الكود. بعد ذلك حيظهر لك الرابط. اضغط على الرابط وحيوديك الى ايميلك. سجل دخول وحتظهر لك الصفحة التالية:
انسخ الكود والصقه في المربع في صورة رقم ١. وحيظهر لك مثل الصورة التالية:
ظهر لنا Mounted بما معناه انه ربطنا Google Colab ب Goolge drive.
تحميل المودل المدرب trained model
حتى نستطيع تحميل المودل الذي دربناه، نحتاج ان نستدعي المودل اولا. نشوف الكود التالي:
صورة رقم ٢ توضح الكود وشرحنا الكود بالتفصيل في المقالة السابقة. طيب نشوف الكود التالي لتحميل المودل المدرب trained model
الجديد علينا في الكود اعلاه هو السطر رقم ٣ لان الباقي شرحته في المقالة السابقة. نلاحظ انه هيئنا المودل في سطر رقم ٢ ومن ثم استدعينا المودل المدرب عن طريق وضع الرابط لمكان حفظ المودل. اسم المودل المحفوظ هو cnn_model كما راينا في المقالة السابقة. وهنا بس استدعينا المودل. نتأكد انه فعلا المودل عنده الدقة عالية كما دربناه سابقا؟
التأكد من دقة المودل
هنا ما في اي شي جديد كله نفس المقالة السابقة التي شرحتها بالتفصيل. نشوف الكود التالي:
في الكود اعلاه حملت البيانات وايضا كتبت دالة الاختبار حتى نختبر دقة المودل وايضا استخدمت CrossEntropyLoss. اذا فيه نقطة مو واضحة ارجع للمقالة السابقة. نشوف الكود التالي:
نلاحظ ان هنا مررنا لدالة الاختبار المودل المدرب cnn_model الذي استدعيناه وايضا ال loss function بالاضافة الى بيانات الاختبار. ورجعت لنا الدالة نسبة الخطا ودقة المودل كما نرى في دالة الاختبار في صورة رقم ٣. وبعد ذلك طبعنا دقة المودل ونلاحظ انها ٩٨٪ كما نرى في صورة رقم ٤.
فهم توقع المودل عن طريق SHAP explainer
أول شي اسمح لي أعطيك نبذة عن ماهو SHAP؟ SHAP هيا مكتبة تسمح لي ان افهم توقع اي مودل. كيف؟ مثلا في مشروعنا هذا المودل الخاص نعطيه صورة فيها رقم وهو يتوقع لي ما هو الرقم. تمام؟ لان SHAP يستخدم بعض النظريات الموجودة في الالعاب بالاضافة الى استخدام shaprly قيم لفهم المودل. ما حدخل في التفاصيل الرياضية الان لكن ممكن اشرحها في مقالة منفصلة. طيب تعال نشوف كيف نستخدم SHAP حتى نتسوعب توقع المودل. أول شي ثبت SHAP عن طريق الكود التالي:
الان حتى نستخدم SHAP نحتاج ان نجهز شيئين وهما:
- الخلفية للارقام background classes: احنا نعرف في مشروعنا هذا انه عندي مخرج المودل هيا الارقام من 0 الى 9. فاحنا نحتاج نجهز هالارقام مع labels كخلفية حتى نشوف بعدين الشرح لتوقع المودل عليها.
- العينات التي نريد نرى الشرح لها
تعال نستدعي الدالة بعد ما نمرر لها بيانات التدريب. نشوف الكود التالي:
الان تعال نجهز العينات التي نريد شرحها. بمعنى من البيانات الموجودة عندنا سوا بيانات التدريب او الاختبار. حناخذ عدد من الصور على كيفنا حتى نسمح ل SHAP يشرح توقع المودل للصور. نشوف الكود التالي:
هذا الكود شفناه قبل في المقالة السابقة والجديد هنا فقط السطر رقم ٣ واحنا اخترنا الصور من ١ الى ٤. اي اخترنا ٣ صور حتى نشوف شرحها. تقدر تختار قد ما تقدر من الصور لكن ممكن يطول.
الان SHAP يطلب البيانات تكون مجهزة على شكل معين وهو الاتي: (# samples , width , height , channels) واحنا نعرف انه شكل بياناتنا كالاتي:(number of batches, channels, height, width). تعال نشوف الكود التالي حتى نجهز البيانات:
الان SHAP يطلب البيانات تكون مجهزة على شكل معين وهو الاتي: (# samples , width , height , channels) واحنا نعرف انه شكل بياناتنا كالاتي:(number of batches, channels, height, width). تعال نشوف الكود التالي حتى نجهز البيانات:
الان بعد أن جهزنا كل شي. حنبني الان اخر دالة والتي حتستدعي الشرح
تعال نستدعي الدالة في الكود التالي ونشوف الناتج:
حتى نحلل الشرح بشكل صحيح لازم نفهمه. أول شي اعرف انه اللون الاحمر يعني انه الخصائص المشروحة تنتمي للكلاس الذي تريد توقعه والعكس اللون الازرق الشرح ضد الكلاس. تعال نفصل أكثر حتى اوضحلك المقصد. نشوف الصورة التالية
لماذا حددت هذه الخانات بالتحديد وقلت انها الشرح للتوقع الصحيح وماذا تعني؟
الحين أول شي نلاحظ انه عندنا الشرح كامل للعينات ال٣ التي اخترنا في صورة رقم ٨ كما حددت باللون الاسود في صورة رقم ١٢. تعال ناخذ اول عينة وهيا الرقم 0. لاحظ اني حددت اول خانة مربع احمر وقلت انه الشرح للتوقع الصحيح. ليه؟ لان احنا نعطي المودل المدرب صورة رقم صفر وهيا يقولي ترا نسبة انه الرقم يكون صفر ترا كذا ومن ثم نروح للخانة الثانية وهيا للواحد ويقول نسبة التوقع انه واحد كذا والى ما نوصل الى ٩. بالتالي اول خانة هيا خاصة بالصفر. اذن نشوف الشرح داخل هذه الخانة اغلبه اللون الاحمر ليه؟ معناه انه توقع المودل كان صفر وهو صحيح وعرفنا هذا من اللون الاحمر ومعناه انه المودل واثق انه الصورة هذه هيا صورة الرقم صفر واللون الاحمر يبين انه واثق. لو رحنا للخانة الثانية، نشوف انه فيه ازرق كثير. ماذا يعني هذا الكلام؟ معناه انه المودل اعطى نسبة قليلة انه الصورة تكون ١ وبالتالي الشرح لها باللون الازرق. نفس الكلام ينطبق على الخانات المتبقية. وايضا نفس الكلام ينطبق على العينات الثانية. لمتابعة الفديو الخاص بالمقالة، الرجاء الضغط هناان اصبت فمن الله وان اخطات فمن نفسي .. لا تنسى مشاركة المقالة اذا أعجبتك .. اخوكم رائد الحربي
ولاي ملاحضات او استفسارات يرجى مراسلتي على تويتر @raedalharbi14 أو كتابة التعليق هنا
أخيراً انتهيت من السلسلة للمرة الأولى
صراحة الشرح روعة
فهمت كل شئ تقريباً من أول مرة
شاهدت كل الفيديوهات وبعدها قرأت المقالات
بالمناسبة: انا وجدت وظيفة deep learning engineer وحالياً المشغل بتاعي هو اللي بيدربني ولكن انا صراحة لم أفهم من اليابانيين شئ ولما بحثت وجدت قناتك ومن ضمن كل القنوات، قوائم التشغيل الخاصة بقناتك كان فيها المشاريع المطلوب مني فهمها.
صراحة ربنا يبارك في مجهوداتك.
انا بحاول من سنة 2018 أفهم الذكاء الاصطناعي والخوارزميات ويعتبر الان فقط بدأت أفهم كيف تعمل.
صراحة ليس بيدي شئ أستطيع عمله لأرد جميلك، فقط سأحاول نشر مقالاتك عندما أنتهي تماماً من فهم كل شئ لاني لدي أصدقاء أيضاً يحاولون فهم الديب ليرنينج ولكن لم يفهموا كيف يبدؤا. سأحاول نشر هذه المقالات بينهم وأتابعهم.
أشكرك مرة ثانية. ومنتظر السلاسل التي ستصدرها مستقبلاً وأتمنى رؤيتك بأعلى المناصب بمجال الذكاء الاصطناعي.