كيفية تغيير معدل التعلم في TensorFlow

مكتبة برمجية مفتوحة المصدر للذكاء الاصطناعي وتعلم الآلة يطلق عليها اسم TensorFlow. وعلى الرغم من أنه يمكن تطبيقها على العديد من المهام، إلا أن تدريب وتصنيف الشبكات العصبية العميقة يتم إعطاؤهم اهتمام خاص.

تم إنشاء TensorFlow من قبل Google Brain، فرع بحث الشركة في الذكاء الاصطناعي. منذ إطلاقها في عام 2015، نمت لتصبح من أكثر مكتبات تعلم الآلة استخدامًا عالميًا.

Python، C++، وJava هي بعض اللغات البرمجية التي يمكن الوصول إلى TensorFlow من خلالها، بالإضافة إلى أنها تعمل مع عدة أنظمة التشغيل، مثل Linux، macOS، Windows، Android، وiOS.

TensorFlow هي أداة قوية لتعلم الآلة والذكاء الاصطناعي. توفر العديد من الميزات وسهلة الاستخدام. TensorFlow هي مكان جيد للبدء إذا كنت مهتمًا بتعلم الآلة.

TensorFlow هي مكتبة مرنة يمكن تطبيقها على جميع أنواع المهام، مثل:

  • تصنيف الصور
  • معالجة اللغة الطبيعية
  • التعرف على الصوت
  • أنظمة التوصيات
  • الروبوتات
  • التصوير الطبي
  • التوقعات المالية

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

كيفية تغيير معدل التعلم في TensorFlow

يمكنك تعديل معدل التعلم في TensorFlow باستخدام طرق واستراتيجيات مختلفة. إليك ثلاثة طرق شائعة:

تعيين معدل التعلم يدويًا

يمكن تغيير معدل التعلم بأسهل طريقة ممكنة من خلال إدخال قيمة جديدة يدويًا في متغير معدل التعلم. تحدد هذه الطريقة معدل التعلم كمتغير TensorFlow أو متغير Python، ويتم تحديث قيمته طوال فترة التدريب. على سبيل المثال:

Python

 

import tensorflow as tf

# تعريف متغير معدل التعلم
learning_rate = tf.Variable(0.001, trainable=False)

# خلال التدريب، قم بتحديث معدل التعلم حسب الحاجة
# على سبيل المثال، قم بتعيين معدل تعلم جديد يبلغ 0.0001
tf.keras.backend.set_value(learning_rate, 0.0001)

يوضح الكود أعلاه كيفية إدخال قيمة جديدة يدويًا في متغير معدل التعلم في TensorFlow لتغيير معدل التعلم. الخطوات مذكورة أدناه:

تعريف المتغير لمعدل التعلم:

Python

 

learning_rate = tf.Variable(0.001, trainable=False)

تخلق هذه السطر متغير TensorFlow يسمى learning_rate وتهيئته بقيمة أولية قدرها 0.001. الحجة المسماة trainable=False تضمن أن متغير معدل التعلم لن يتم تحديثه خلال التدريب.

تحديث معدل التعلم حسب الحاجة:

Python

 

tf.keras.backend.set_value(learning_rate, 0.0001)

في هذا المثال، يتم استخدام وظيفة set_value من tf.keras.backend لتحديث قيمة متغير معدل التعلم. الوسيطة الأولى هي المتغير الذي سيتم تحديثه (learning_rate)، والوسيطة الثانية هي قيمة معدل التعلم الجديد (0.0001 في هذه الحالة).

يمكنك تنظيم موعد وكيفية تغيير معدل التعلم عن طريق تحديث متغير معدل التعلم يدويًا طوال التدريب. يمكنك تجربة مختلف الإعدادات، تغيير معدل التعلم بناءً على ظروف معينة، أو حتى إنشاء خطتك لمعدل التعلم.

في هذه الطريقة، لديك السيطرة الكاملة على معدل التعلم، لكن عليك تعديله يدويًا حسب احتياجاتك.

خطط معدل التعلم

يمكنك تغيير معدل التعلم بشكل منهجي خلال التدريب باستخدام خطط معدل التعلم. تتوفر العديد من خطط معدل التعلم المدمجة في TensorFlow، بما في ذلك:

tf.keras.optimizers.schedules.ExponentialDecay، tf.keras.optimizers.schedules.PiecewiseConstantDecay، أو tf.keras.optimizers.schedules.CosineDecay. تغير هذه الجداول معدل التعلم وفقًا لقواعد محددة مسبقًا. على سبيل المثال:

Python

 

import tensorflow as tf

# تحديد خطة معدل التعلم
learning_rate_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=0.001,
    decay_steps=10000,
    decay_rate=0.96
)

# إنشاء محسّن باستخدام خطة معدل التعلم
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_schedule)

مقطع الكود أعلاه يوضح كيفية استخدام خطة ExponentialDecay لمعدل التعلم في TensorFlow. إليك تفصيل لما يفعله كل معامل:

  • initial_learning_rate: معدل التعلم الأولي في بداية التدريب.
  • decay_steps: عدد الخطوات بعدها سيتم تقليل معدل التعلم.
  • decay_rate: المعدل الذي سيتم به تقليل معدل التعلم. على سبيل المثال، إذا تم تعيين decay_rate على 0.96، سيتم ضرب معدل التعلم بـ 0.96 لكل decay_steps خطوة.

لإنشاء محول بناءً على جدول معدل التعلم، يمكنك تمرير كائن learning_rate_schedule كمعامل learning_rate إلى المحول. في الكود الخاص بك، تستخدم محول Adam، لكن يمكنك استخدام جدول معدل التعلم هذا مع محركات تحسين أخرى.

باستخدام جدول معدل التعلم ExponentialDecay، سيتناقص معدل التعلم تدريجيًا بمرور الوقت، مما يسمح للنموذج بالتقارب بشكل أكثر فعالية في التدريب. قم بتعديل قيم initial_learning_rate، decay_steps، و decay_rate وفقًا لمتطلباتك الخاصة وخصائص بيانات التدريب الخاصة بك.

تقليل الحاجة إلى التدخل اليدوي تلقائيًا من خلال ضبط معدل التعلم استنادًا إلى الجدول الزمني المحدد.

Callbacks

توفر TensorFlow أيضًا آلية دعم المكالمات التي تتيح لك تعديل معدل التعلم بشكل ديناميكي بناءً على شروط معينة. على سبيل المثال، يمكنك استخدام مكالمة tf.keras.callbacks.LearningRateScheduler لتحديد جدول معدل تعلم يستقل أو مكالمة tf.keras.callbacks.ReduceLROnPlateau لتخفيض معدل التعلم عندما يتعثر تسلسل الخسارة التحققية. فيما يلي مثال:

Python

 

import tensorflow as tf

# تعريف دالة استدعاء لتعديل معدل التعلم تلقائيًا
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.1,
    patience=5,
    min_lr=0.0001
)

# خلال تدريب النموذج، تمرير الاستدعاء إلى دالة fit()
model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

مقتطف الكود أعلاه يوضح كيفية استخدام استدعاء ReduceLROnPlateau لتعديل معدل التعلم تلقائيًا خلال تدريب النموذج. وهنا تفصيل لما تفعله كل معامل:

  • monitor: المقياس الذي سيتم مراقبته. في هذه الحالة، يتم تعيينه إلى val_loss,’ مما يعني أن الاستدعاء سيراقب الخسارة التحقق.
  • factor: العامل الذي يؤدي إلى انخفاض في معدل التعلم. إذا تم استيفاء الشرط المقدم، على سبيل المثال، إذا تم تعيين العامل إلى 0.1، سيتم ضرب معدل التعلم بـ 0.1.
  • patience: عدد الأيام بدون تحسن، بعدها سيتم تخفيض معدل التعلم. إذا لم تتحسن الخسارة التحقق لعدد patience من الأيام، سيتم تخفيض معدل التعلم.
  • min_lr: القيمة الدنيا التي يمكن أن يصل إليها معدل التعلم. بمجرد وصول معدل التعلم إلى هذه القيمة الدنيا، لن يتم تخفيضها إلى أبعد من ذلك.

لاستخدام هذا الاستدعاء، ستمرره كمعامل لدالة fit() عند تدريب نموذجك. تأكد من استبدال x_train، y_train، x_val، و y_val ببياناتك التدريبية والتحقق الفعلية.

Python

 

model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

خلال التدريب، سيتم مراقبة الخسارة التحققية باستخدام المكالمة ReduceLROnPlateau، وإذا لم تتحسن لعدد patience من الدورات، سيتم تخفيض معدل التعلم بواسطة العامل المحدد العاملوهذا يسمح بتعديل تلقائي لمعدل التعلم بناءً على أداء النموذج خلال التدريب.

باستخدام المكالمات، لديك الحرية الإضافية لتعديل معدل التعلم نتيجة لظروف أو أحداث معينة خلال التدريب.

هذه طرق قياسية لتعديل معدل التعلم في TensorFlow. الطريقة التي تستخدمها ستعتمد على المتطلبات والسيناريوهات التي لديك.

الخاتمة

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

Source:
https://dzone.com/articles/how-to-change-the-learning-rate-of-tensorflow