التعلم العميق وأستخداماته في الرؤية الحاسوبية - الجزء الخامس
Deep Learning For Computer Vision-Part 5
التعرف على مكتبة keras
هي منصة عمل ذات مستوى عال خاصة بالشبكات العصبية الإصطناعية مكتوبة بلغة البايثون, وتستند في عملها على إحدى المكتبات ذات المستوى الأدنى منها وهي (TensorFlow or Theano or CNTK).
وتتميز هذه المكتبة بسرعة أداءها في عملية التدريب, وهذه الميزة تعتبر مهمة جداً في مجالات التدريب عند الباحثين, وكذلك من مميزاتها هو التقليل من الكود المطلوب.
وهذه المكتبة توجد ضمناً في مكتبة (tensorflow).
سوف نقوم بإنشاء نموذج يتم تدريبه ليقوم مقام بوابة (Exclusive-OR). وقد إخترنا في هذا النموذج نفس العناصر التي إستخدمناها في التطبيق السابق من حيث عدد الطبقات وكذلك من حيث عدد الوحدات (Neurons) المستخدمة في كل طبقة وكذلك نفس الخوارزمية المستخدمة في حساب الفقد (Loss), وكذلك نفس الخوارزمية المستخدمة القيام بعمليات التحديث على العناصر (Optimizer), وكذلك إستخدمنا نفس دالة التنشيط (Activation function) التي أستخدمت في التطبيق السابق.
وسوف نقوم بإنشاء تطبيقين لتنفيذ هذه المهمة البسيطة (Exclusive-OR), حيث نستخدم في التطبيق الأول أسلوب التكديس الخطي للطبقات (Linear stack of layers) حيث نستخدم الكلاس (Sequential) لإنشاء نواة النموذج, ثم نقوم بعدها بإضافة الطبقات التي نحتاجها,أما التطبيق الثاني فسوف نستخدم فيه أسلوب آخر لإنشاء نواة النموذج وهذا الأسلوب يسمى (Keras functional API). لنبدأ الآن بإنشاء التطبيق الأول.
السطر رقم (1): لإستدعاء الكلاس (Sequential) والذي سوف نستخدمه في إنشاء نواة النموذج والذي سوف نضيف إليه طبقتين. علماً إنَّ هذا الكلاس موجود في مكتبة (tensorflow).
السطر رقم (2): لإستدعاء الكلاس (Dense) الذي نستخدمه في توليد الطبقات التي نحتاجها, وهذه الطبقات تكون من نوع الطبقات الكثيفة (Dense).
السطر رقم (3): لإستدعاء مكتبة (Numpy).
السطر رقم (5): لإنشاء مصفوفة من نوع (numpy) تستخدم كبيانات تدريب داخلة للنموذج.
السطر رقم (6): لإنشاء مصفوفة من نوع (numpy) تستخدم كبيانات تسمية (Labels) لتدريب النموذج.
السطر رقم (7): الشروع في إنشاء النموذج حيث إستخدمنا الكلاس (Sequential) لإنشاء نواة النموذج.
السطر رقم (8): لإضافة الطبقة المخفية (Hidden layer) للنموذج وذلك عن طريق الكلاس (Dense) الذي يقوم بتوليد الطبقة وتتم إضافتها إلى النموذج عن طريق الدالة (add). لقد إستخدمنا في هذه الطبقة وحدات (Units or Neurons) عدد (5), وإستخدمنا دالة التنشيط نوع (Sigmoid).
السطر رقم (9): لإضافة طبقة الإخراج, حيث إستخدمنا فيها وحدة (Unit) واحد فقط. ودالة التنشيط أيضاً من نوع (Sigmoid activation function).
السطر رقم (10): لتهيئة النموذج لعملية التدريب وذلك بتجهيز العناصر الأساسية لعملية التدريب مثل الخوارزمية المناسبة لحساب قيمة الفقد (Loss), حيث إستخدمنا الخوارزمية المسماة (Mean squared error). كذلك نجهزه بالخوارزمية الخاصة بعملية التحسين (Optimization) وقد إخترنا له الخوارزمية المسماة (Adam). كذلك إخترنا مقياس الدقة (binary_accuracy) للظهور إثناء عملية التدريب.
السطر رقم (13): لأجل إظهار ملخص لشكل نموذجنا الذي قمنا بإنشاءه من ناحية الطبقات وما تحتويه كل طبقة من وحدات (Units), وكذلك ماتحتويه كل طبقة من عناصر خاضعة للتحديث أي (Parameters) وهي الأوزان (Weights) وكذلك قيم الإنحياز (Biases).
السطر رقم (1): للقيام بعملية التدريب (Training) عن طريق الدالة (fit), وقد قمنا بتمرير العناصر التالية إليها وهي:
1 – بيانات التدريب الخاصة بالإدخال وقد إستخدمنا المصفوفة (x_train) والتي قمنا بإنشاءها سابقاً.
2 – بيانات التدريب الخاصة بالتسميات (Labels) وقد إستخدمنا المصفوفة (y_train).
3 – عدد مرات تكرار بيانات التدريب أي عدد الحقب (Epochs).
4 – الإطناب (Verbose) في عرض النتائج أو الإختصار وقد إخترنا الرقم (1), وهي وسطى بين الإطناب والإختصار, حيث إنَّ القيم تتراوح مابين (0) و (2).
السطر رقم (2): لإختبار النموذج بعد عملية التدريب حيث نقوم بإعطاءه نفس المصفوفة الخاصة بالتدريب وإظهار المصفوفة الخارجة من النموذج للتأكد من مدى مطابقتها لمصفوفة التسميات (Labels). وبعد تنفيذ الكود أعلاه حصلنا على المصفوفة التالية:
وكما نلاحظ من النتيجة أعلاه إنها قريبة جداً من مصفوفة التسميات (y_train).
في هذا التطبيق نقوم بإنشاء نموذج يقوم بنفس وظيفة النموذج السابق ولكن هذه المرة نستخدم الأسلوب المسمى (Keras functional API) في إنشاء النموذج بكل طبقاته, ولقد قمنا بإضافة طبقة مخفية ثانية تتكون من (5) وحدات لغرض تحسين دقة النموذج , والكود موضح في الشكل التالي:
شرح الكود:
السطر رقم (1): لإستدعاء الكلاس (Dense) الذي سوف نستخدمه في إنشاء طبقة من نوع (Dense).
السطر رقم (2): لإستدعاء الكلاس (Input) الذي سوف نستخدمه في إنشاء طبقة الإدخال (Input layer) للنموذج الذي سوف نقوم بإنشاءه, كذلك لإستدعاء الكلاس (Model) الذي سوف نستخدمه في إنشاء النموذج الخاص بنا لتنفيذ المهمة وهي (Exclusive OR).
السطر رقم (3): لإستدعاء الكلاس (MSE) الذي سوف نستخدمه في إنشاء خوارزمية حساب قيمة الفقد (Loss) والتي تسمى (Mean Sequared Error).
السطر رقم (4): لإستدعاء الكلاس (Adam) والذي سوف نستخدمه في إنشاء خوارزمية التحسين (Optimizer).
السطر رقم (10): لإنشاء طبقة الإدخال (Input layer) الخاصة بالنموذج الذي ننوي إنشاءه.
السطر رقم (11): لإنشاء الطبقة المخفية الأولى (First hidden layer) والتي تتكون من خمس وحدات (Units).
السطر رقم (12): لإنشاء الطبقة المخفية الثانية (Second hidden layer) والتي تتكون أيضاً من خمس وحدات. ونلاحظ أننا هنا قد إستخدمنا دالة التنشيط (RELU Activation function) لكلا الطبقتين وذلك لزيادة كفاءة التدريب وهذا ما سوف نتطرق إليه لاحقاً إنشاء ألله.
السطر رقم (13): لإنشاء طبقة الإخراج (Output layer) والتي تتكون من وحدة (Unit) واحدة.
ونلاحظ إنه يتم التعامل مع الطبقات على أساس إنها دوال (Functions), حيث إنَّ الطبقة السابقة توضع في نهاية جملة الكود للطبقة اللاحقة وكأنها تضرب بها.
السطر رقم (14): لإنشاء النموذج عن طريق الكلاس (Model), وهذا الكلاس يحتاج إلى معاملين هما طبقة أو طبقات الإدخال وكذلك يحتاج إلى طبقة أو طبقات الإخراج, لأننا أن ننشيء عن طريق هذا الكلاس نماذج ذات مداخل متعددة وكذلك مخارج متعددة.
السطر رقم (1): للبدأ بعملية التدريب.
السطر رقم (2): للتعرف على مايتنبأ به النموذج عند إدخال نفس بيانات الإدخال (x_train). وقد حصلنا على نتيجة مقاربة لبيانات التسمية (y_train).
شرح بعض المفاهيم والتقنيات المستخدمة في تدريب الآلة والتعلم العميق
1- دالة التنشيط نوع (The Rectified Linear Unit):
2- One-hot encoding:
3 - Softmax activation function:
4 – Cross-entropy:
5 - تقنية الإهمال أو الترك (Dropout)
6 - تقنية التطبيع على دفعات
تعليقات
إرسال تعليق