التعلم العميق وأستخداماته في الرؤية الحاسوبية - الجزء الثالث
Deep Learning For Computer Vision-Part 3
التطبيق
الأول:
في هذا
التطبيق نقوم بإنشاء شبكة عصبية إصطناعية بسيطة تتكون من طبقة واحدة فيها خلية
واحدة وهناك مدخلان للبيانات (x1, x2), وهذه الشبكة مهمتها تطبيق عملية (Logical
AND gate) على المداخيل وإخراج النتيجة (Y). حيث قمنا
بكتابة الكود بإستخدام لغة بايثون فقط (بدون أي مكتبة إضافية) وذلك لأجل سهولة
الشرح والتوضيح.وإستخدمنا نفس خطوات خوارزمية التدريب الخاصة بالبيرسبترون التي
تناولناها في الجزء الثاني.
الشكل (1) يبين الكود بلغة بايثون وبإستخدام برنامج (PyCharm) كبيئة عمل:
الأسطر من (1) لغاية (3): لعمل ثلاث مصفوفات تمثل بيانات التدريب (inputs x1, x2) وكذلك بيانات الإخراج(outputs Ydesired). السطران الرابع والخامس يمثلان الإعلان عن متغيرين هما (theta) لحفظ قيمة العتبة و (alfa) لحفظ معدل التعلم (learning rate). السطر السادس للإعلان عن مصفوفة تضم قيم الوزنين الخاصين بالمدخلين, وهنا أعطيناهما قيم إبتدائية (0.3) للوزن الخاص بالمدخل (x1) و (- 0.1) للوزن الخاص بالمدخل (x2).
السطر رقم (7): هو للإعلان عن
مصفوفة فارغة لأجل أن نجمع فيها القيم الخارجة من الشبكة (Yactual) حيث تظهر
لنا كنتيجة بعد طباعتها.
السطر رقم (8):
للإعلان عن عداد (i). السطر التاسع للإعلان عن المتغير (epoch) والذي يمثل رقم الحقبة (الحقبة الواحدة تمثل الإنتهاء من جميع البيانات
الخاصة بالتدريب).
السطر رقم (10): قمنا بعمل حلقة تتكرر (20) مرة (من صفر إلى 19) وهذا العدد يمثل عدد خطوات التدريب (iteration). في السطر الحادي عشر قمنا بوضع شرط وهو عندما تصل قيمة (i = 4) أي إنتهاء حقبة كاملة, فإذا تحقق هذا الشرط سوف تجرى عدة عمليات
وهي:
1 - تصفير العداد (i).
2 - طباعة رقم الحقبة.
3 - إضافة عدد واحد إلى عداد الحقب.
4 - طباعة مصفوفة المخرجات (y_actual_array).
5 - تصفير مصفوفة المخرجات لكي تستعد لتجميع المخرجات في الحقبة اللاحقة.
السطر رقم (18): قمنا بإحتساب قيمة (x_sum) والذي يمثل مجموع قيم المداخيل المضروبة بأوزانها ومطروحاً منها
قيمة العتبة (theta). أما الأسطر من (19) إلى (22) فهي لتطبيق دالة
التنشيط (step function) على المقدار (x_sum) لإستخراج قيمة (Yactual). أما السطر
(23) فهو للإيعاز بإستخراج
قيمة الخطأ (l1_error) لإستخدامها بعملية تحديث
الأوزان. أما السطران (24) و (25) فهما لأجل إحتساب قيمة
التحديث للوزنين (weights[0] & weights[1]) . وفي السطران (26) و (27) لأجل القيام بعملية
التحديث.
شرح الكود:
السطر رقم (1): إستدعينا مكتبة (math) .
الأسطر من (2) لغاية (10): فهي للإعلان عن المتغيرات المطلوبة ماعدا السطر (7) فهو قيمة ثابتة.
السطر رقم (11): للإيعاز بإنشاء حلقة تتكرر (60000) مرة, كل تكرار يمثل خطوة تدريب
واحدة (iteration), وكل (4) خطوات من التدريب تمثل حقبة
واحدة (epoch). عندما تصل قيمة العداد (i) إلى العدد (4) فهذا يعني حقبة واحدة, وهذا
ماتكتشفه الجملة الشرطية (if I >= 4:) في السطر رقم (12).
بقية الأسطر ضمن
الحلقة التكرارية هي لأجل إجراء الحسابات المطلوبة لأجل تحديث الأوزان وكذلك تحديث
قيم العتبات (ɵ3, ɵ4, ɵ5) وحسب خطوات العمل في الخوارزمية الخاصة بتدريب الشبكة العصبية
ذات الطبقات المتعددة والتي درسناها في المقالة السابقة.
السطر رقم (48): إيعاز لأجل تخزين قيمة الإخراج (y5) في المصفوفة (y_actual_array).بعد إنتهاء حلقة التكرار نقوم
بطباعة رقم الحقبة (epoch) النهائي وكذلك نطبع قيم الإخراج في هذه الحقبة والذي يكون
مخزوناً في المصفوفة (y_actual_array).
وبعد تنفيذ الكود نحصل
على النتيجة التالية كما في الشكل (5) أدناه.
تعليقات
إرسال تعليق