اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

ده الكود

# Remember to inherit from the correct class
class EarlyStoppingCallback(tf.keras.callbacks.Callback):

    # Define the correct function signature for on_epoch_end method
    def on_epoch_end(self,epoch,logs=None):
        
        # Check if the accuracy is greater or equal to 0.98
        if logs['accuracy'] >= 0.98:
                            
            # Stop training once the above condition is met
            self.model.stop_training = True

            print("\nReached 98% accuracy so cancelling training!")

 

Recommended Posts

  • 0
نشر

يوفر آلية تحكم ديناميكية أثناء عملية تدريب النماذج من خلال ما يعرف باسم Callbacks، حيث يرث الصنف المعرف EarlyStoppingCallback خصائصه من الصنف الأساسي tf.keras.callbacks.Callback ليسمح بالتدخل البرمجي في نهاية كل حقبة تدريبية Epoch.

ويتم ذلك عبر الدالة on_epoch_end التي تستقبل سجلات الأداء logs وتقوم بفحص قيمة الدقة accuracy الحالية، وفي حال وصول النموذج إلى نسبة دقة 98% أو أعلى، فسيتم تفعيل الأمر self.model.stop_training = True لإيقاف التدريب فورًا، وذلك هام لحماية النموذج من مشكلة Overfitting التي قد تحدث عند استمرار التدريب لفترات طويلة بعد الوصول للحل الأمثل، حيث يبدأ النموذج حينها في حفظ البيانات بدلاً من فهم الأنماط العامة.

بالتالي توفير الموارد الحسابية والوقت عبر إنهاء العمليات بمجرد تحقيق الهدف المطلوب دون الحاجة لانتظار انتهاء كافة الحقب المحددة مسبقًا.

image.thumb.png.58b5519599a74c3e1bbe242a526387b1.png

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته .

هذا الكود يمثل تطبيق مخصص لتقنية مهمة جدا في تعلم الآلة تسمى الإيقاف المبكر (Early Stopping).

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

  • توفير الوقت والموارد الحاسوبية (Efficiency)

فبدلا من الاستمرار في تدريب النموذج لعدد محدد مسبقا من ال Epochs يقوم هذا الكود بإيقاف التدريب فورا بمجرد الوصول للهدف المطلوب مثلا دقة 98%. مثال: إذا وصل النموذج لدقة 98% في ال Epochs  رقم 10 فلا داعي لإضاعة الوقت وموارد وحدة المعالجة الرسومية (GPU) في تدريبه لل 90 Epochs المتبقية.

  • منع ال (Overfitting) 

إن  ال Overfitting هي واحدة من أكبر مشاكل تدريب النماذج  حيث يبدأ النموذج في حفظ البيانات بدلا من فهم الأنماط العامة إذا استمر التدريب لفترة طويلة جدا بعد الوصول لأفضل أداء ولهذا بإيقاف التدريب عند نقطة جيدة بما فيه الكفاية مثل 98% فإنك تحمي النموذج من أن يبدأ في تدهور أدائه على البيانات الجديدة (Validation Data).

وإليك شرح الكود كل سطر على حدى :

  • الوراثة (tf.keras.callbacks.Callback): الكود يرث من فئة Callback الخاصة ب Keras وهذا يسمح للكود بالتدخل في عملية التدريب في نقاط محددة مثل بداية التدريب ونهاية ال Epochs .
  • الدالة on_epoch_end: هذه الدالة يتم استدعاؤها تلقائيا من قبل Keras في نهاية كل دورة تدريبية (Epoch) والمتغير logs يحتوي على نتائج التدريب الحالية مثل الدقة accuracy والخسارة loss.
  • الشرط if logs.get('accuracy') >= 0.98: هنا يتم فحص القاموس logs للبحث عن قيمة الدقة وإذا تجاوزت أو ساوت 98% يتم تنفيذ أمر الإيقاف.
  • أمر الإيقاف self.model.stop_training = True: هذا هو السطر الأهم وهو الذي يرسل إشارة لعملية التدريب (model.fit) بأن تتوقف فورا ولا تكمل باقي ال Epochs المجدولة.

 

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

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

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

وأيضاً الوقاية من مشكلة تسمى Overfitting أو الإفراط في التلاؤم. 

  • 0
نشر

وعليكم السلام ورحمة الله تعالى وبركاته،

الكود صحيح تقنيا لكن فيه مشكلة محتملة فال: 

logs['accuracy']

 قد يسبب KeyError إذا كان المفتاح غير موجود في dictionary ال logs والحل الأفضل هو استخدام:

logs.get('accuracy', 0)

 بدلا من الوصول المباشر أو التحقق من وجود المفتاح أولا أيضا تأكد أن في model.compile() استخدمت:

metrics=['accuracy']

 وليس:

metrics=['acc'] 

لأن TensorFlow 2.x غيّر المفتاح من 'acc' إلى 'accuracy' وبالنسبة لل implementation فال signature صحيح وال inheritance من tf.keras.callbacks.Callback مضبوط ولجعل الكود أكثر أمانا يمكنك استبدال السطر بـ:

 if logs.get('accuracy', 0) >= 0.98:

 لتجنب أي أخطاء runtime وضمان أن ال callback يشتغل حتى لو كان logs فارغ أو المفتاح غير موجود.

  • 0
نشر

هذا الكود مهم جدًا في تدريب نماذج تعلّم الآلة، ووظيفته الأساسية هي التحكم في عملية التدريب ومنع الاستمرار غير الضروري. سأشرح لك الفكرة ثم أهمية هذا الأسلوب عمليًا.

ما الذي يفعله هذا الكود؟

هذا الكود يعرّف Callback مخصّص في Keras اسمه EarlyStoppingCallback.

الـ Callback هو كود:

  • يراقب عملية التدريب
  • يتدخل أثناء التدريب بدون تغيير بنية النموذج

في هذه الحالة:

  • بعد كل Epoch
  • يتم فحص قيمة accuracy
  • إذا وصلت أو تجاوزت 98%
  • يتم إيقاف التدريب فورًا

لماذا هذا مهم في تدريب نماذج الذكاء الاصطناعي؟

1. توفير الوقت والموارد

بدون هذا الكود:

  • النموذج قد يستمر في التدريب 50 أو 100 Epoch
  • رغم أنه وصل للأداء المطلوب مبكرًا

هذا يعني:

  • استهلاك CPU / GPU بلا فائدة
  • وقت أطول بدون تحسن حقيقي

2. تقليل خطر Overfitting

  • عندما يستمر التدريب بعد الوصول لأداء جيد:
  • النموذج قد يبدأ في حفظ البيانات
  • الأداء على البيانات الجديدة قد يسوء

إيقاف التدريب مبكرًا:

  • يحافظ على تعميم النموذج
  • يمنع الإفراط في التعلّم

3. جعل التدريب ذكيًا بدلًا من ثابت

  • بدل أن تقول:
  • epochs=100
  • وتتمنى الأفضل،
  • أنت تقول:
  • “درّب حتى تحقق الهدف، ثم توقّف”
  • وهذا أسلوب احترافي في التدريب.

لماذا نستخدم Callback بدل شرط عادي؟

لأن:

  • Keras لا يسمح بإيقاف التدريب من داخل حلقة التدريب يدويًا
  • Callback هو الطريقة الرسمية للتدخل أثناء التدريب

الفرق بين هذا والكلاس الجاهز EarlyStopping

Keras يوفّر:

tf.keras.callbacks.EarlyStopping

لكن هذا الكود:

مخصص حسب شرطك

  • يعتمد على accuracy وليس val_loss
  • مفيد للتعلّم والفهم
  • في المشاريع الحقيقية غالبًا نستخدم:
  • val_loss
  • مع patience

ملاحظة مهمة

هذا الكود يراقب:

logs['accuracy']

وهذا يعني:

  • دقة بيانات التدريب فقط
  • وليس التحقق (Validation)

في المشاريع الواقعية:

  • نفضّل val_accuracy
  • لتجنب overfitting

متى يكون هذا الكود مناسبًا؟

  • أثناء التعلّم والتجارب
  • في المسابقات
  • عند تدريب نماذج بسيطة
  • عندما يكون الهدف رقمًا واضحًا

الخلاصة

أهمية هذا الكود أنه:

يوقف التدريب عند الوصول لهدف محدد

يوفر الوقت والموارد

يقلل overfitting

يعطيك تحكمًا ذكيًا في عملية التدريب

هو ليس “كود إضافي”، بل جزء من عقل النموذج أثناء التدريب.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...