0Pricing
Learn AI with Python · درس

استخدام VGG16 وResNet50 كنموذجين أساسيين

‏keras.applications.VGG16(weights='imagenet', include_top=False)، وإضافة رأس مخصص

استخدام VGG16 وResNet50 كنموذجين أساسيين درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

وحدة Keras Applications

توفر tf.keras.applications عشرات البنى المدرّبة مسبقًا التي يمكنكم تنزيلها بسطر واحد. ومن أشهرها VGG16، وهي مكدس بسيط وعميق من الالتفافات بحجم 3x3، وResNet50، التي تستخدم الوصلات المتبقية وتتميز بعمق ودقة أكبر.

تحميل VGG16 كنموذج أساسي

حمّلوا VGG16 باستخدام أوزان ImageNet، ولكن من دون رأس المصنّف، حتى تتمكنوا من إرفاق رأسكم الخاص.

from tensorflow.keras.applications import VGG16

base = VGG16(
    weights="imagenet",        # download pretrained weights
    include_top=False,         # drop the 1000-class classifier
    input_shape=(224, 224, 3)  # standard ImageNet input size
)

فهم الوسائط

  • weights="imagenet": تحميل الأوزان المدرّبة مسبقًا بدلًا من الأوزان العشوائية.
  • include_top=False: إزالة المصنّف الكثيف الأصلي حتى تتمكنوا من إضافة مصنّفكم.
  • input_shape=(224,224,3): الارتفاع والعرض وثلاث قنوات RGB.

إن ضبط include_top=False هو ما يجعل النموذج قابلًا لإعادة الاستخدام في مهمة جديدة.

تجميد النموذج الأساسي

اضبطوا base.trainable = False حتى تظل أوزان الالتفاف المدرّبة مسبقًا ثابتة أثناء مرحلة التدريب الأولى. وسيتعلم الرأس الجديد الخاص بكم فقط.

base.trainable = False
print(len(base.trainable_weights))  # -> 0 when frozen

GlobalAveragePooling2D

ينتج النموذج الأساسي خريطة سمات ثلاثية الأبعاد مثل (7, 7, 512). ويحسب GlobalAveragePooling2D متوسط كل قناة عبر شبكتها المكانية، فيحوّلها إلى متجه واحد لكل قناة، بطول 512 هنا.

ويحل هذا محل Flatten وDense ضخمين، مما يقلل عدد المعلمات بدرجة كبيرة ويحد من فرط التخصيص.

from tensorflow.keras.layers import GlobalAveragePooling2D

# (batch, 7, 7, 512) -> (batch, 512)
pooled = GlobalAveragePooling2D()(base.output)

إضافة رأس الإخراج Dense

أرفقوا طبقة Dense بحجم يساوي عدد فئاتكم. استخدموا softmax للتصنيف متعدد الفئات، أو sigmoid للتصنيف الثنائي.

from tensorflow.keras import layers, Model

x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = Model(inputs=base.input, outputs=outputs)

الانتقال إلى ResNet50

تستخدم ResNet50 واجهة API نفسها. وتتيح لها الوصلات المتبقية، أو وصلات التخطي، التدريب على عمق أكبر بكثير من دون تلاشي التدرجات، وغالبًا ما تحقق دقة أعلى على ImageNet من VGG16 بسرعة مماثلة.

from tensorflow.keras.applications import ResNet50

base = ResNet50(
    weights="imagenet",
    include_top=False,
    input_shape=(224, 224, 3)
)
base.trainable = False

VGG16 مقابل ResNet50

  • VGG16: نحو 138 مليون معلمة، ومكدس موحّد وبسيط من طبقات 3x3، واستهلاك كبير للذاكرة، وسهلة الفهم.
  • ResNet50: نحو 25 مليون معلمة، وكتل متبقية، وعمق أكبر، ودقة أعلى عادةً واستهلاك أقل للموارد.

تُعد ResNet50 الخيار الافتراضي الأقوى لمعظم مهام التعلم بالنقل الحديثة.

مطابقة المعالجة المسبقة

لكل نوع من النماذج دالة preprocess_input الخاصة به. تطرح VGG16 متوسط قيم RGB، بينما تستخدم ResNet50 تحجيمًا مشابهًا بنمط Caffe. استوردوا دائمًا الدالة المطابقة للنموذج الأساسي.

from tensorflow.keras.applications.resnet50 import preprocess_input

x = preprocess_input(image_batch)  # required for correct results

تجميع النموذج

بعد تجميد النموذج الأساسي، جمّعوا النموذج ودرّبوا الرأس باستخدام مُحسِّن عادي.

model.compile(
    optimizer="adam",
    loss="categorical_crossentropy",
    metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=10)

فحص البنية

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

model.summary()
# Look at "Trainable params" vs "Non-trainable params"

اختبار سريع

تحققوا من مدى إلمامكم ببناء نموذج للتعلم بالنقل في Keras.

مراجعة

حمّلتم VGG16 وResNet50 باستخدام weights="imagenet" وinclude_top=False وinput_shape=(224,224,3)، وجمّدتم النموذج الأساسي باستخدام base.trainable=False، وجمّعتم السمات باستخدام GlobalAveragePooling2D، ثم أضفتم رأس إخراج Dense.

تُعد ResNet50 الخيار الافتراضي الأقوى. والخطوة التالية هي إلغاء تجميد الطبقات لإجراء الضبط الدقيق.

الأسئلة الشائعة

هل درس «استخدام VGG16 وResNet50 كنموذجين أساسيين» مجاني؟

نعم — نص درس «استخدام VGG16 وResNet50 كنموذجين أساسيين» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

ماذا ستتعلم في «استخدام VGG16 وResNet50 كنموذجين أساسيين»؟

‏keras.applications.VGG16(weights='imagenet', include_top=False)، وإضافة رأس مخصص تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟

لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «استخدام VGG16 وResNet50 كنموذجين أساسيين»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟

نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مفاهيم واستراتيجيات التعلم بالنقل
  2. استخدام VGG16 وResNet50 كنموذجين أساسيين
  3. الضبط الدقيق: إلغاء تجميد الطبقات وإعادة تدريبها
  4. ‏MobileNet وEfficientNet للنشر على الأجهزة الطرفية
← العودة إلى Learn AI with Python