1. نظرة عامة
سوف تتعلم في هذا التمرين المعملي كيفية إنشاء مصنف Keras. وبدلاً من محاولة الوصول إلى التركيبة المثالية من طبقات الشبكة العصبونية للتعرّف على الأزهار، سنستخدم أولاً تقنية تُعرَف باسم "تعلُّم النقل" لتكييف نموذج قوي مدرّب مسبقًا على مجموعة البيانات.
يشتمل هذا التمرين المعملي على التفسيرات النظرية اللازمة عن الشبكات العصبية، كما يعد نقطة انطلاق جيدة للمطورين الذين يتعلمون عن التعلم المتعمق.
هذا التمرين هو الجزء الثاني من "Keras on TPU" السلسلة. يمكنك القيام بها بالترتيب التالي أو بشكل مستقل.
- مسار بيانات سرعة معالجة الموتّرات: tf.data.Dataset وTFRecords
- [THIS LAB] نموذج Keras الأول لديك مع التعلُّم الناتج عن نقل البيانات
- الشبكات العصبونية الالتفافية، مثل Keras ووحدات معالجة الموتّرات
- وسائل تحويل حديثة، squeezenet، وXception، مع وحدات معالجة الموتّرات ووحدات معالجة الموتّرات
ما ستتعرَّف عليه
- لإنشاء مُصنِّف صور Keras باستخدام طبقة softmax وفقدان الطاقة عبر الإنتروبيا
- للغش 😈، باستخدام التعلم الآلي بدلاً من إنشاء نماذجك الخاصة.
الملاحظات
إذا لاحظت أي أخطاء في التمرين المعملي الخاص بالرموز، يُرجى إخبارنا بذلك. يمكن تقديم الملاحظات من خلال مشاكل GitHub [ رابط الملاحظات].
2. دليل البدء السريع لخدمة Google Colaboratory
يستخدم هذا التمرين المعملي متعاون Google ولا يتطلب أي إعداد من جانبك. Colaboratory هي منصة لأوراق الملاحظات على الإنترنت مخصَّصة لأغراض التعليم. وهو يوفر تدريبًا مجانيًا على استخدام وحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات ووحدة معالجة الموتّرات.
يمكنك فتح نموذج ورقة الملاحظات هذا وتشغيله في خليتين للتعرّف على Colaboratory.
اختيار إحدى خلفيات وحدة معالجة الموتّرات
في قائمة Colab، اختَر وقت التشغيل >. غيِّر نوع بيئة التشغيل ثم اختَر "وحدة معالجة الموتّرات". سوف تستخدم في هذا التمرين المعملي وحدة معالجة بيانات (TPU) قوية للتدريب الذي يتم تسريعه باستخدام الأجهزة. سيتم الاتصال ببيئة التشغيل تلقائيًا عند التنفيذ الأول، أو يمكنك استخدام الزر "اتصال" في أعلى الجانب الأيسر.
تنفيذ ورقة الملاحظات
نفِّذ الخلايا واحدة تلو الأخرى عن طريق النقر على خلية واستخدام Shift-ENTER. يمكنك أيضًا تشغيل ورقة الملاحظات بالكامل باستخدام "بيئة التشغيل" > تنفيذ الكل
جدول المحتويات
تحتوي جميع أوراق الملاحظات على جدول محتويات. يمكنك فتحه باستخدام السهم الأسود على اليمين.
الخلايا المخفية
لن تعرض بعض الخلايا إلا عناوينها. هذه ميزة خاصة بأوراق الملاحظات في Colab. يمكنك النقر مرّتين عليها لرؤية الرمز بداخلها، ولكن عادةً لا يكون ذلك مثيرًا للاهتمام. عادةً ما تكون دوال الدعم أو التصورات. لا تزال بحاجة إلى تشغيل هذه الخلايا حتى يتم تحديد الدوال داخلها.
المصادقة
يمكن لخدمة Colab الوصول إلى حِزم Google Cloud Storage الخاصة بك بشرط المصادقة باستخدام حساب معتمَد. سيؤدي مقتطف الرمز أعلاه إلى بدء عملية مصادقة.
3- [معلومات] مصنِّف الشبكة العصبونية 101
باختصار
إذا كانت جميع المصطلحات الغامقة في الفقرة التالية معروفة لك بالفعل، يمكنك الانتقال إلى التمرين التالي. إذا كنت في بداية مسيرتك في التعلم المتعمق، فمرحبًا بك، ونرجو مواصلة القراءة.
بالنسبة للنماذج المبنية كسلسلة من الطبقات، يوفر Keras واجهة برمجة التطبيقات التسلسلية. على سبيل المثال، يمكن كتابة مصنف صور يستخدم ثلاث طبقات كثيفة باللغة 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, ... )
الشبكة العصبونية الكثيفة
وهذه هي أبسط شبكة عصبية لتصنيف الصور. وهو يتكون من "الخلايا العصبية" مرتبة في طبقات. الطبقة الأولى تعالج البيانات وتدخل مخرجاتها في طبقات أخرى. يُطلق عليه "كثيف" لأنه يتم ربط كل خلية عصبية بجميع الخلايا العصبية في الطبقة السابقة.
يمكنك إدخال صورة إلى مثل هذه الشبكة عن طريق تسوية قيم النموذج اللوني أحمر أخضر أزرق (RGB) لكل وحدات البكسل في خط متجه طويل واستخدامها كمدخلات. وهذا ليس أفضل أسلوب للتعرف على الصور ولكننا سنعمل على تحسينه لاحقًا.
الخلايا العصبية وعمليات التفعيل وخوارزمية RELU
"الخلية العصبية" تحسب المجموع المرجّح لجميع إدخالاته، وتضيف قيمة تسمى "تحيز" وتغذي النتيجة من خلال ما يسمى "دالة التفعيل". القيم التقديرية والتحيز غير معروفة في البداية. سيتم إعدادها بشكل عشوائي و"تعلمها" من خلال تدريب الشبكة العصبية على الكثير من البيانات المعروفة.
تسمى دالة التفعيل الأكثر شيوعًا RELU للوحدة الخطية المصححة. إنها دالة بسيطة للغاية كما ترون في الرسم البياني أعلاه.
تفعيل Softmax
تنتهي الشبكة أعلاه بطبقة مكونة من 5 خلايا عصبية لأننا نصنف الزهور إلى 5 فئات (وردة، توليب، الهندباء، أقحوان، دوار الشمس). يتم تنشيط الخلايا العصبية في الطبقات المتوسطة باستخدام وظيفة تفعيل RELU الكلاسيكية. على الرغم من ذلك، في الطبقة الأخيرة، نريد حساب الأعداد بين 0 و1 التي تمثّل احتمالية أن تكون هذه الزهرة وردة وزهرة توليب وما إلى ذلك. لذلك، سنستخدم دالة تفعيل تُسمّى "softmax".
يتم تطبيق softmax على متجه من خلال أخذ الأس لكل عنصر ثم تسوية الخط المتجه، عادةً باستخدام المعيار L1 (مجموع القيم المطلقة) بحيث تضيف القيم ما يصل إلى 1 ويمكن تفسيرها على أنها احتمالات.
الخسارة العابرة للإنتروبيا
والآن بعد أن تُنتج شبكتنا العصبية تنبؤات من الصور المدخلة، نحتاج إلى قياس مدى جودتها، أي المسافة بين ما تخبرنا به الشبكة والإجابات الصحيحة، والتي تُعرف غالبًا باسم "التصنيفات". تذكر أن لدينا التسميات الصحيحة لجميع الصور في مجموعة البيانات.
قد تصلح أي مسافة، ولكن بالنسبة لمشكلات التصنيف، يتم استخدام ما يسمى "المسافة بين الإنتروبيا" هي الأكثر فعالية. سنسمي هذا الخطأ أو "خسارة" الدالة:
انحدار التدرج
"تدريب" الشبكة العصبية تعني في الواقع استخدام صور وتسميات التدريب لضبط الأوزان والتحيزات وذلك لتقليل وظيفة فقدان بين القصور. إليك طريقة عملها.
القصور عبري هو دالة الأوزان والتحيزات ووحدات البكسل للصورة التطبيقية وفئتها المعروفة.
إذا احتسبنا المشتقات الجزئية للإنتروبيا المتداخلة نسبيًا مع جميع معاملات الترجيح وجميع الانحيازات التي حصلنا عليها على "تدرج"، محسوبًا لصورة معينة وتصنيفها والقيمة الحالية للأوزان والانحرافات. تذكر أنه يمكن أن يكون لدينا ملايين الأوزان والتحيزات، وبالتالي فإن حساب التدرج يشبه الكثير من العمل. لحسن الحظ، تُجري Tensorflow ذلك نيابةً عنا. الخاصية الرياضية للتدرج هي أنه يشير إلى "لأعلى". وبما أننا نريد أن نتجه إلى حيث يكون القصور المشترك منخفضًا، فإننا نسير في الاتجاه المعاكس. ونقوم بتحديث الأوزان والتحيزات بجزء من التدرج. ثم نكرر الأمر نفسه مرارًا وتكرارًا باستخدام المجموعات التالية من صور التدريب والتصنيفات في حلقة تدريب. ونأمل أن يتلاءم هذا مع مكان يكون فيه القصور عبر الحد الأدنى هو الحد الأدنى، على الرغم من أنه لا يوجد شيء يضمن أن هذا الحد الأدنى فريد من نوعه.
التجميع السريع والزخم
يمكنك حساب التدرج على مثال صورة واحدة فقط وتحديث الأوزان والانحيازات على الفور، ولكن عند إجراء ذلك على مجموعة من 128 صورة مثلاً، ستمنح 128 صورة تدرّجًا يمثل بشكل أفضل القيود التي تفرضها نماذج الصور المختلفة ومن ثم يتقارب مع الحلّ بشكل أسرع. حجم الدفعة الصغيرة هو معلمة قابلة للتعديل.
وهذه التقنية، تُسمّى أحيانًا "الانحدار العشوائي المتدرج" وهناك فائدة أخرى أكثر واقعية: فالعمل مع الدُفعات يعني أيضًا العمل على مصفوفات أكبر حجمًا، وعادةً ما يكون تحسين هذه المصفوفات أسهل في ما يتعلّق بوحدات معالجة الرسومات ووحدات معالجة الموتّرات.
بالرغم من ذلك، يمكن أن يكون التقارب فوضويًا بعض الشيء، ويمكن أن يتوقف حتى إذا كان خط متجه التدرج بأكملها بأصفار. هل هذا يعني أننا وجدنا الحد الأدنى؟ ليس دائمًا. قد يكون عنصر التدرج صفرًا في قيمة الحد الأدنى أو الحد الأقصى. في حال كان الخط المتجه للتدرج الذي يحتوي على ملايين العناصر، إذا كانت جميعها أصفارًا، فإن احتمالية تطابق كل صفر مع الحد الأدنى وعدم وجود أي منها حتى نقطة قصوى صغيرة جدًا. في عالم متعدد الأبعاد، تعتبر نقاط السرج شائعة جدًا ولا نريد التوقف عندها.
صورة توضيحية: نقطة سرج. التدرج هو 0 ولكنه ليس حدًا أدنى في جميع الاتجاهات. (إسناد الصور Wikimedia: من Nicoguaro - عملك الخاص، CC BY 3.0)
الحل هو إضافة بعض الزخم إلى خوارزمية التحسين بحيث يمكنها تجاوز نقاط السرج بدون توقف.
مسرد المصطلحات
دفعة أو دفعة صغيرة: يتم دائمًا إجراء التدريب على دُفعات من بيانات التدريب والتصنيفات. ويساعد ذلك في تقارب الخوارزمية. "الدُفعة" هو البعد الأول لمعرضات البيانات. على سبيل المثال، يحتوي متفرع الشكل [100، 192، 192، 3] على 100 صورة بحجم 192×192 بكسل مع ثلاث قيم لكل بكسل (RGB).
خسارة الإنتروبيا: دالة خسارة خاصة غالبًا ما تُستخدم في المصنِّفات.
الطبقة الكثيفة: طبقة من الخلايا العصبية التي تتصل فيها كل خلية عصبية بجميع الخلايا العصبية في الطبقة السابقة.
الميزات: يُطلق على مدخلات الشبكة العصبية أحيانًا اسم "الميزات". يسمى فن معرفة أي أجزاء من مجموعة البيانات (أو مجموعات من الأجزاء) للتغذية في الشبكة العصبية للحصول على تنبؤات جيدة باسم "هندسة الخصائص".
labels: اسم آخر لـ "classes" الإجابات الصحيحة أو الإجابات الصحيحة في مشكلة تصنيف خاضعة للإشراف
معدّل التعلّم: جزء من التدرج يتم من خلاله تعديل الأوزان والانحيازات في كل تكرار في حلقة التدريب.
logits: تسمى مخرجات طبقة الخلايا العصبية قبل تطبيق دالة التفعيل باسم "logits". يأتي المصطلح من "الدالة اللوجستية" يُعرف أيضًا باسم "الدالة السينية" التي كانت أكثر وظائف التفعيل شيوعًا. "المخرجات العصبية قبل الدالة اللوجستية" تم اختصارها إلى "logits".
الخسارة: دالة الخطأ التي تقارن مخرجات الشبكة العصبونية بالإجابات الصحيحة
الخلية العصبونية: تحسب المجموع المرجّح لمدخلاتها وتضيف انحيازًا وتغذي النتيجة من خلال إحدى وظائف التفعيل.
ترميز واحد فعال: يتم ترميز الفئة 3 من 5 كمتجه مكون من 5 عناصر، جميع الأصفار باستثناء الصف الثالث وهو 1.
relu: وحدة خطية مُصحَّحة وظيفة تفعيل شائعة للخلايا العصبية.
sigmoid: دالة تفعيل أخرى كانت شائعة ولا تزال مفيدة في حالات خاصة.
softmax: دالة تفعيل خاصة تعمل على متجه وتزيد من الفرق بين المكوِّن الأكبر وجميع العناصر الأخرى، كما تعمل على ضبط الخط المتجه ليصبح مجموعه 1 بحيث يمكن تفسيره على أنه متجه للاحتمالات. تُستخدم كخطوة أخيرة في المصنِّفات.
tenor: "تينسور" يشبه المصفوفة ولكن بعدد عشوائي من الأبعاد. المتسلل أحادي البعد هو متجه. والمتسلل الثنائي الأبعاد هو مصفوفة. ومن ثم يمكنك الحصول على متسابقات ذات أبعاد 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% بهذه الطريقة.
الحلّ
ها هو دفتر الحل. يمكنك استخدامه إذا واجهتك مشكلة.
Keras Flowers transfer learning (solution).ipynb
النقاط التي تناولناها
- 👀 طريقة كتابة مصنِّف باللغة Keras
- 🤓 تكتمل باستخدام الطبقة الأخيرة softmax، وفقدان الطاقة بين الإنتروبيا.
- 😈 نقل بيانات التعلُّم
- 🎉 تدريب نموذجك الأول
- 🧐 بعد فقدانها ودقتها أثناء التدريب
يرجى تخصيص بعض الوقت لاستعراض قائمة التحقق هذه في ذهنك.
5- تهانينا!
يمكنك الآن إنشاء نموذج Keras. يُرجى المتابعة إلى التمرين المعملي التالي لمعرفة كيفية تجميع الطبقات الالتفافية.
- مسار بيانات سرعة معالجة الموتّرات: tf.data.Dataset وTFRecords
- [THIS LAB] نموذج Keras الأول لديك مع التعلُّم الناتج عن نقل البيانات
- الشبكات العصبونية الالتفافية، مثل Keras ووحدات معالجة الموتّرات
- وسائل تحويل حديثة، squeezenet، وXception، مع وحدات معالجة الموتّرات ووحدات معالجة الموتّرات
استخدام وحدات معالجة الموتّرات عمليًا
تتوفّر وحدات معالجة الموتّرات ووحدات معالجة الرسومات على Cloud AI Platform:
- على الأجهزة الافتراضية التي تستخدم ميزة Deep Learning VM
- في دفاتر الملاحظات حول AI Platform (AI Platform)
- في وظائف تدريب منصة الذكاء الاصطناعي
وأخيرًا، نرحِّب بملاحظاتك. يُرجى إخبارنا بما إذا لاحظت أمرًا غير صحيح في هذا التمرين المعملي أو إذا كنت تعتقد أنه ينبغي تحسينه. يمكن تقديم الملاحظات من خلال مشاكل GitHub [ رابط الملاحظات].
|