1. نظرة عامة
في هذا الدرس التطبيقي، ستتعلّم كيفية إنشاء مصنّف Keras. بدلاً من محاولة تحديد المجموعة المثالية من طبقات الشبكة العصبونية للتعرّف على الزهور، سنستخدم أولاً تقنية تُعرف باسم "التعلّم القائم على نقل المهام" لتكييف نموذج مدرَّب مسبقًا قوي مع مجموعة البيانات الخاصة بنا.
يتضمّن هذا المختبر التوضيحات النظرية اللازمة حول الشبكات العصبية، وهو نقطة انطلاق جيدة للمطوّرين الذين يتعلّمون عن التعلّم العميق.
هذا المختبر هو الجزء 2 من سلسلة "Keras على وحدات معالجة Tensor". يمكنك تنفيذها بالترتيب التالي أو بشكل مستقل.
- خطوط نقل البيانات السريعة المتوافقة مع وحدات TPU: tf.data.Dataset وTFRecords
- [هذا المختبر] نموذج Keras الأول، مع التعلّم القائم على نقل المهام
- الشبكات العصبونية الالتفافية باستخدام Keras ووحدات معالجة الموتّرات
- الشبكات العصبية الالتفافية الحديثة وSqueezenet وXception باستخدام Keras ووحدات معالجة الموتّرات

أهداف الدورة التعليمية
- لإنشاء مصنّف صور Keras الخاص بك باستخدام طبقة softmax وفقدان الإنتروبيا المتقاطعة
- للتغشيش 😈، يمكنك استخدام التعلّم القائم على نقل المهام بدلاً من إنشاء نماذجك الخاصة.
الملاحظات
إذا لاحظت أي خطأ في هذا الدرس العملي، يُرجى إخبارنا بذلك. يمكن تقديم الملاحظات من خلال مشاكل GitHub [ رابط الملاحظات].
2. البدء السريع في Google Colaboratory
يستخدم هذا التمرين المعملي Google Collaboratory ولا يتطلّب أي إعداد من جانبك. Colaboratory هي منصة دفاتر ملاحظات على الإنترنت لأغراض تعليمية. وتوفّر تدريبًا مجانيًا على وحدات المعالجة المركزية ووحدات معالجة الرسومات ووحدات معالجة الموتّرات.

يمكنك فتح دفتر الملاحظات النموذجي هذا وتجربة بعض الخلايا للتعرّف على Colaboratory.
اختيار واجهة خلفية لوحدة معالجة الموتّرات

في قائمة Colab، اختَر بيئة التشغيل > تغيير نوع بيئة التشغيل، ثم اختَر TPU. في هذا الدرس العملي، ستستخدم وحدة معالجة الموتّرات (TPU) الفعّالة التي تتيح التدريب المُسارع بواسطة الأجهزة. سيتم الاتصال بوقت التشغيل تلقائيًا عند التنفيذ الأول، أو يمكنك استخدام الزر "ربط" في أعلى يسار الصفحة.
تنفيذ دفتر الملاحظات

نفِّذ الخلايا واحدة تلو الأخرى من خلال النقر على إحدى الخلايا واستخدام Shift-ENTER. يمكنك أيضًا تشغيل ورقة الملاحظات بأكملها من خلال بيئة التشغيل > تشغيل الكل
جدول المحتويات

تحتوي جميع دفاتر الملاحظات على جدول محتويات. يمكنك فتحها باستخدام السهم الأسود على اليمين.
الخلايا المخفية

لن تعرض بعض الخلايا سوى عنوانها. هذه ميزة خاصة بأوراق ملاحظات Colab. يمكنك النقر مرّتين على هذه الملفات للاطّلاع على الرمز البرمجي بداخلها، ولكنّه عادةً لا يكون مثيرًا للاهتمام. عادةً ما تكون وظائف دعم أو تصور. ومع ذلك، يجب تشغيل هذه الخلايا لتعريف الدوال بداخلها.
المصادقة

يمكن أن يصل Colab إلى حِزم Google Cloud Storage الخاصة بك إذا تم إثبات هويتك باستخدام حساب معتمَد. سيؤدي مقتطف الرمز أعلاه إلى بدء عملية مصادقة.
3- [INFO] مقدّمة عن مصنّف الشبكة العصبونية
باختصار
إذا كنت تعرف جميع المصطلحات بالخط العريض في الفقرة التالية، يمكنك الانتقال إلى التمرين التالي. إذا كنت مبتدئًا في مجال التعلّم العميق، أهلاً بك، ويُرجى مواصلة القراءة.
بالنسبة إلى النماذج التي تم إنشاؤها كتسلسل من الطبقات، يوفّر Keras واجهة برمجة التطبيقات Sequential API. على سبيل المثال، يمكن كتابة مصنّف صور يستخدم ثلاث طبقات كثيفة في Keras على النحو التالي:
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=[192, 192, 3]),
tf.keras.layers.Dense(500, activation="relu"),
tf.keras.layers.Dense(50, activation="relu"),
tf.keras.layers.Dense(5, activation='softmax') # classifying into 5 classes
])
# this configures the training of the model. Keras calls it "compiling" the model.
model.compile(
optimizer='adam',
loss= 'categorical_crossentropy',
metrics=['accuracy']) # % of correct answers
# train the model
model.fit(dataset, ... )

الشبكة العصبونية الكثيفة
هذه هي أبسط شبكة عصبية لتصنيف الصور. وهي تتألف من "خلايا عصبية" مرتبة في طبقات. تعالج الطبقة الأولى بيانات الإدخال وتُدخل مخرجاتها إلى طبقات أخرى. يُطلق عليها اسم "كثيفة" لأنّ كل عصبون مرتبط بجميع العصبونات في الطبقة السابقة.

يمكنك إدخال صورة إلى هذه الشبكة من خلال تسوية قيم النموذج اللوني أحمر أخضر أزرق لجميع وحدات البكسل في متجه طويل واستخدامه كمدخلات. هذه ليست أفضل تقنية للتعرّف على الصور، ولكننا سنعمل على تحسينها لاحقًا.
الخلايا العصبية والتنشيط ووظيفة RELU
تحسب "الخلية العصبية" مجموعًا مرجّحًا لجميع مدخلاتها، وتضيف قيمة تُعرف باسم "الانحياز"، ثمّ تنقل النتيجة من خلال ما يُعرف باسم "دالة التنشيط". في البداية، تكون الأوزان والانحيازات غير معروفة. سيتم ضبطها بشكل عشوائي و "تعلّمها" من خلال تدريب الشبكة العصبية على الكثير من البيانات المعروفة.

تُعرف دالة التفعيل الأكثر شيوعًا باسم RELU، وهي اختصار لعبارة وحدة خطية مصحَّحة. إنّها دالة بسيطة للغاية كما يمكنك أن ترى في الرسم البياني أعلاه.
دالة التنشيط Softmax
تنتهي الشبكة أعلاه بطبقة من 5 خلايا عصبية لأنّنا نصنّف الزهور إلى 5 فئات (وردة، وتوليب، وأسد الأسنان، وأقحوان، وعباد الشمس). يتم تنشيط الخلايا العصبية في الطبقات الوسيطة باستخدام دالة التنشيط الكلاسيكية RELU. في الطبقة الأخيرة، نريد حساب أرقام بين 0 و1 تمثّل احتمال أن تكون هذه الزهرة وردة أو زنبقًا أو غير ذلك. لذلك، سنستخدم دالة تفعيل تُعرف باسم "softmax".
يتم تطبيق دالة softmax على متّجه من خلال أخذ الأس لكل عنصر ثم تسوية المتّجه، وعادةً ما يتم ذلك باستخدام قاعدة L1 (مجموع القيم المطلقة) بحيث يصل مجموع القيم إلى 1 ويمكن تفسيرها على أنّها احتمالات.

فقدان الإنتروبيا المتقاطعة
بعد أن أصبحت شبكتنا العصبية تنتج توقّعات من الصور المُدخَلة، علينا قياس مدى صحة هذه التوقّعات، أي المسافة بين ما تخبرنا به الشبكة والإجابات الصحيحة، والتي تُعرف غالبًا باسم "التصنيفات". تذكَّر أنّ لدينا تصنيفات صحيحة لكل الصور في مجموعة البيانات.
يمكن استخدام أي مسافة، ولكن بالنسبة إلى مشاكل التصنيف، تكون "مسافة الإنتروبيا المتقاطعة" هي الأكثر فعالية. سنسمّي هذا الخطأ أو دالة "الخسارة" على النحو التالي:

النزول المتدرّج
"تدريب" الشبكة العصبونية يعني في الواقع استخدام صور التدريب والتصنيفات لتعديل الأوزان والانحيازات من أجل تقليل دالة فقدان الإنتروبيا المتقاطعة. إليك طريقة عملها.
الإنتروبيا المتقاطعة هي دالة للأوزان والانحيازات ووحدات البكسل في صورة التدريب وفئتها المعروفة.
إذا حسبنا المشتقات الجزئية للإنتروبيا المتقاطعة بالنسبة إلى جميع الأوزان وجميع الانحيازات، نحصل على "تدرّج" يتم حسابه لصورة وتصنيف وقيمة حالية للأوزان والانحيازات. تذكَّر أنّه يمكن أن يكون لدينا ملايين الأوزان والانحيازات، لذا يبدو أنّ حساب التدرّج يتطلّب الكثير من العمل. لحسن الحظ، تتولّى TensorFlow هذه المهمة. الخاصية الرياضية للتدرّج هي أنّه يشير إلى "الأعلى". بما أنّنا نريد الانتقال إلى المكان الذي تكون فيه الإنتروبيا المتداخلة منخفضة، فإنّنا نتّجه في الاتجاه المعاكس. نعدّل معاملات الترجيح والانحياز بجزء من التدرّج. بعد ذلك، نكرّر العملية نفسها مرارًا وتكرارًا باستخدام الدفعات التالية من الصور والتصنيفات التدريبية، وذلك في حلقة تدريبية. نأمل أن يؤدي ذلك إلى تقليل الإنتروبيا المتقاطعة إلى الحدّ الأدنى، مع العلم أنّه لا يوجد ما يضمن أنّ هذا الحدّ الأدنى فريد.

التقسيم إلى دفعات صغيرة والزخم
يمكنك احتساب التدرّج على صورة مثال واحدة فقط وتعديل الأوزان والانحيازات على الفور، ولكنّ إجراء ذلك على مجموعة من 128 صورة مثلاً يعطي تدرّجًا يمثّل القيود التي تفرضها صور الأمثلة المختلفة بشكل أفضل، وبالتالي من المرجّح أن يتقارب مع الحلّ بشكل أسرع. حجم الدفعة الصغيرة هو مَعلمة قابلة للتعديل.
تتميّز هذه التقنية، التي تُعرف أحيانًا باسم "النزول التدرّجي العشوائي"، بميزة عملية أخرى، وهي أنّ استخدام مجموعات من البيانات يعني أيضًا استخدام مصفوفات أكبر، ويسهل عادةً تحسينها على وحدات معالجة الرسومات ووحدات معالجة الموتّرات.
ومع ذلك، يمكن أن يكون التقارب فوضويًا بعض الشيء، ويمكن أن يتوقف حتى إذا كان خط متجه التدرج يتضمّن أصفارًا فقط. هل يعني ذلك أنّنا عثرنا على حدّ أدنى؟ ليس دائمًا. يمكن أن يكون مكوّن التدرّج اللوني صفرًا عند الحدّ الأدنى أو الأقصى. مع خط متجه التدرج الذي يحتوي على ملايين العناصر، إذا كانت جميعها أصفارًا، يكون احتمال أن يتوافق كل صفر مع الحد الأدنى وألا يتوافق أي منها مع الحد الأقصى صغيرًا جدًا. في مساحة ذات أبعاد عديدة، تكون نقاط السرج شائعة جدًا ولا نريد التوقف عندها.

صورة توضيحية: نقطة سرج يكون التدرّج اللوني 0، ولكنّه ليس الحدّ الأدنى في جميع الاتجاهات. (معلومات تحديد مصدر الصورة Wikimedia: By Nicoguaro - Own work, CC BY 3.0)
الحلّ هو إضافة بعض الزخم إلى خوارزمية التحسين حتى تتمكّن من تجاوز نقاط السرج بدون توقّف.
مسرد المصطلحات
الدُفعات أو الدُفعات الصغيرة: يتم التدريب دائمًا على دُفعات من بيانات التدريب والتصنيفات. يساعد ذلك الخوارزمية في التوافق. عادةً ما تكون سمة "الحزمة" هي السمة الأولى لموترات البيانات. على سبيل المثال، يحتوي متّجه متعدّد الأبعاد بالشكل [100, 192, 192, 3] على 100 صورة بحجم 192x192 بكسل مع ثلاث قيم لكل بكسل (النموذج اللوني أحمر أخضر أزرق).
فقدان الإنتروبيا المتقاطعة: دالة فقدان خاصة تُستخدم غالبًا في أدوات التصنيف.
الطبقة الكثيفة: هي طبقة من الخلايا العصبية حيث تكون كل خلية عصبية مرتبطة بجميع الخلايا العصبية في الطبقة السابقة.
الميزات: يُطلق على مدخلات الشبكة العصبية أحيانًا اسم "الميزات". يُطلق على فن تحديد أجزاء مجموعة البيانات (أو مجموعات الأجزاء) التي يجب إدخالها إلى شبكة عصبونية للحصول على توقّعات جيدة اسم "هندسة الخصائص".
التصنيفات: اسم آخر "للفئات" أو الإجابات الصحيحة في مشكلة التصنيف الخاضع للإشراف
معدّل التعلّم: جزء من التدرّج يتم من خلاله تعديل الأوزان والانحيازات في كل تكرار من حلقة التدريب.
اللوغاريتمات: تُسمّى نواتج إحدى طبقات الخلايا العصبية قبل تطبيق دالة التنشيط "اللوغاريتمات". يأتي المصطلح من "الدالة اللوجستية" المعروفة أيضًا باسم "الدالة السينية" التي كانت دالة التنشيط الأكثر شيوعًا. تم اختصار "مخرجات الخلايا العصبية قبل الدالة اللوجستية" إلى "اللوغاريتمات".
دالة الخسارة: دالة الخطأ التي تقارن نواتج الشبكة العصبية بالإجابات الصحيحة
الخلية العصبية: تحسب المجموع المرجّح لمدخلاتها، وتضيف تحيّزًا، وتمرّر النتيجة من خلال دالة تنشيط.
الترميز الأحادي: يتم ترميز الفئة 3 من أصل 5 كمتجه من 5 عناصر، وكلها أصفار باستثناء العنصر الثالث الذي تكون قيمته 1.
relu: وحدة خطية مصحَّحة دالّة تفعيل شائعة للعصبونات.
sigmoid: هي دالّة تفعيل أخرى كانت شائعة الاستخدام وما زالت مفيدة في حالات خاصة.
softmax: هي دالّة تفعيل خاصة تعمل على متّجه، وتزيد الفرق بين أكبر عنصر وجميع العناصر الأخرى، كما تعمل على تسوية المتّجه ليكون مجموع عناصره 1، وبالتالي يمكن تفسيره على أنّه متّجه احتمالات. يُستخدَم كخطوة أخيرة في المصنّفات.
الموتر: "الموتر" هو بنية بيانات تشبه المصفوفة ولكن بعدد عشوائي من الأبعاد. المتّجه متعدّد الأبعاد أحادي الأبعاد هو متجه. الموتر الثنائي الأبعاد هو مصفوفة. ويمكنك بعد ذلك الحصول على موترات ذات 3 أو 4 أو 5 أبعاد أو أكثر.
4. التعلم القائم على نقل المهام
بالنسبة إلى مشكلة تصنيف الصور، من المحتمل ألا تكون الطبقات الكثيفة كافية. علينا التعرّف على الطبقات الالتفافية والطرق العديدة التي يمكنك ترتيبها بها.
ولكن يمكننا أيضًا استخدام اختصار. تتوفّر شبكات عصبونية التفافية مدرَّبة بالكامل يمكن تنزيلها. من الممكن إزالة الطبقة الأخيرة، وهي رأس تصنيف softmax، واستبدالها بطبقة خاصة بك. تبقى جميع الأوزان والتحيزات المدرَّبة كما هي، ولا يتم إعادة تدريب سوى طبقة softmax التي تضيفها. تُعرف هذه التقنية باسم "التعلّم القائم على نقل المهام"، وهي تعمل بشكل مذهل طالما أنّ مجموعة البيانات التي تم تدريب الشبكة العصبية عليها مسبقًا "قريبة بما يكفي" من مجموعة البيانات الخاصة بك.
التجربة العملية
يُرجى فتح دفتر الملاحظات التالي وتنفيذ الخلايا (Shift-ENTER) واتّباع التعليمات حيثما ترى التصنيف "مطلوب العمل".
Keras Flowers transfer learning (playground).ipynb
معلومات إضافية
من خلال التعلّم القائم على نقل المهام، يمكنك الاستفادة من بنى الشبكات العصبونية الالتفافية المتقدّمة التي طوّرها كبار الباحثين، ومن التدريب المُسبَق على مجموعة بيانات ضخمة من الصور. في حالتنا، سنستخدم أسلوب التعلّم القائم على نقل المهام من شبكة تم تدريبها على ImageNet، وهي قاعدة بيانات صور تحتوي على العديد من النباتات والمشاهد الخارجية، وهي قريبة بما يكفي من الزهور.

صورة توضيحية: استخدام شبكة عصبية التفافية معقّدة تم تدريبها مسبقًا كصندوق أسود، وإعادة تدريب رأس التصنيف فقط هذا ما يُعرف بالتعلّم القائم على نقل المهام. سنتعرّف لاحقًا على طريقة عمل هذه الترتيبات المعقّدة للطبقات الالتفافية. في الوقت الحالي، هذه مشكلة شخص آخر.
التعلّم القائم على نقل المهام في Keras
في Keras، يمكنك إنشاء مثيل لنموذج مدرَّب مسبقًا من مجموعة tf.keras.applications.*. على سبيل المثال، MobileNet V2 هي بنية التفافية جيدة جدًا تظل معقولة الحجم. من خلال اختيار include_top=False، ستحصل على النموذج المُدرَّب مسبقًا بدون طبقة softmax النهائية لتتمكّن من إضافة طبقتك الخاصة:
pretrained_model = tf.keras.applications.MobileNetV2(input_shape=[*IMAGE_SIZE, 3], include_top=False)
pretrained_model.trainable = False
model = tf.keras.Sequential([
pretrained_model,
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(5, activation='softmax')
])
لاحظ أيضًا الإعداد pretrained_model.trainable = False. يتم تجميد الأوزان والانحيازات للنموذج المدرَّب مسبقًا حتى تتمكّن من تدريب طبقة softmax فقط. يتضمّن ذلك عادةً عددًا قليلاً نسبيًا من الأوزان ويمكن إجراؤه بسرعة وبدون الحاجة إلى مجموعة بيانات كبيرة جدًا. ومع ذلك، إذا كان لديك الكثير من البيانات، يمكن أن يعمل التعلّم القائم على نقل المهام بشكل أفضل مع pretrained_model.trainable = True. توفّر الأوزان المُدرَّبة مسبقًا قيمًا أولية ممتازة، ويمكن تعديلها أثناء التدريب لتلائم مشكلتك بشكل أفضل.
أخيرًا، لاحظ طبقة Flatten() التي تم إدراجها قبل طبقة softmax الكثيفة. تعمل الطبقات الكثيفة على متّجهات مسطّحة من البيانات، ولكن لا نعرف ما إذا كان النموذج المُدرَّب مسبقًا يعرضها. لهذا السبب نحتاج إلى تسوية البيانات. في الفصل التالي، سنتعمّق في بنى الشبكات الالتفافية، وسنشرح تنسيق البيانات الذي تعرضه الطبقات الالتفافية.
من المفترض أن تحقّق دقة تقارب% 75 باتّباع هذا الأسلوب.
Solution
إليك دفتر ملاحظات الحلّ. يمكنك استخدامها إذا واجهتك مشكلة.
Keras Flowers transfer learning (solution).ipynb
المواضيع التي تناولناها
- 🤔 كيفية كتابة مصنّف في Keras
- 🤓 تم ضبطه باستخدام طبقة softmax الأخيرة، وفقدان الإنتروبيا المتقاطعة
- 😈 التعلّم القائم على نقل المهام
- 🤔 تدريب النموذج الأول
- 🧐 فقدان البيانات ودقتها أثناء التدريب
يُرجى تخصيص بعض الوقت لمراجعة قائمة التحقّق هذه في ذهنك.
5- تهانينا!
يمكنك الآن إنشاء نموذج Keras. يُرجى الانتقال إلى الميزة الاختبارية التالية للتعرّف على كيفية تجميع الطبقات الالتفافية.
- خطوط نقل البيانات السريعة المتوافقة مع وحدات TPU: tf.data.Dataset وTFRecords
- [هذا المختبر] نموذج Keras الأول، مع التعلّم القائم على نقل المهام
- الشبكات العصبونية الالتفافية باستخدام Keras ووحدات معالجة الموتّرات
- الشبكات العصبية الالتفافية الحديثة وSqueezenet وXception باستخدام Keras ووحدات معالجة الموتّرات
وحدات معالجة الموتّرات في التطبيقات العملية
تتوفّر وحدات معالجة الموتّرات ووحدات معالجة الرسومات على منصة Cloud AI:
- على أجهزة Deep Learning الافتراضية
- في AI Platform Notebooks
- في وظائف AI Platform Training
أخيرًا، يسرّنا تلقّي ملاحظاتك. يُرجى إعلامنا إذا لاحظت أي خطأ في هذا المختبر أو إذا كنت تعتقد أنّه يجب تحسينه. يمكن تقديم الملاحظات من خلال مشاكل GitHub [ رابط الملاحظات].

|

