0Pricing
Learn AI with Python · درس

بناء شبكات CNN وتدريبها في PyTorch

‏nn.Conv2d وnn.MaxPool2d وnn.Linear وحلقة التدريب والمُحسِّن والخسارة وتتبع الدقة

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

لماذا نستخدم CNNs للصور؟

تتعلّم الشبكات العصبية الالتفافية الأنماط المكانية: الحواف، ثم الأنسجة، ثم الأشكال والكائنات. تشترك عمليات الالتفاف في الأوزان عبر الصورة، ما يجعل CNNs فعّالة ومدركة لتغيّر موضع الكائن، ولذلك تُعدّ أساس الرؤية الحاسوبية.

import torch
import torch.nn as nn

الفئة الأساسية nn.Module

ترث النماذج من nn.Module. تعرّفون الطبقات في __init__ وتدفق البيانات في forward. ويتتبّع PyTorch المعاملات والتدرجات تلقائيًا.

class CNN(nn.Module):
    def __init__(self):
        super().__init__()

طبقات الالتفاف

تمرّر nn.Conv2d(in_channels, out_channels, kernel_size) مرشحات قابلة للتعلّم فوق الصورة لإنتاج خرائط سمات. وتستقبل طبقة الالتفاف الأولى 3 قنوات ‏(RGB)، ثم تنتج عددًا أكبر من القنوات التي تلتقط سمات مختلفة.

self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)

طبقات التجميع

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

self.pool = nn.MaxPool2d(kernel_size=2, stride=2)

الطبقات كاملة الاتصال

بعد عمليات الالتفاف، افردوا السمات ومرّروها عبر طبقات nn.Linear لإنتاج درجات التصنيفات. وتنتج طبقة Linear النهائية قيمة واحدة لكل تصنيف.

self.fc1 = nn.Linear(32 * 8 * 8, 128)
self.fc2 = nn.Linear(128, 10)  # 10 classes

طريقة forward

تحدّد طريقة forward كيفية تدفق البيانات: من الالتفاف إلى ReLU ثم التجميع، مع تكرار ذلك، ثم فرد البيانات وتمريرها إلى الطبقات الخطية. وتضيف F.relu اللاخطية التي تمكّن الشبكة من تعلّم أنماط معقّدة.

import torch.nn.functional as F

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(x.size(0), -1)  # flatten
        x = F.relu(self.fc1(x))
        return self.fc2(x)

دالة الخسارة والمحسّن

للتصنيف، استخدموا CrossEntropyLoss. ويحدّث محسّن مثل Adam الأوزان باستخدام التدرجات. مرّروا إليه معاملات النموذج ومعدل التعلّم.

model = CNN()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

حلقة التدريب: تصفير التدرجات

تبدأ كل خطوة بمسح التدرجات القديمة باستخدام optimizer.zero_grad(). إذا تخطيتم هذه الخطوة، فستتراكم التدرجات عبر الدفعات، ما يؤدي إلى إفساد تحديثاتكم.

for images, labels in loader:
    optimizer.zero_grad()

المرور الأمامي ودالة الخسارة

مرّروا الدفعة عبر النموذج للحصول على التنبؤات، ثم احسبوا دالة الخسارة بمقارنة التنبؤات بالتصنيفات الصحيحة. ودالة الخسارة هي رقم واحد يقيس مدى خطأ النموذج.

    outputs = model(images)
    loss = criterion(outputs, labels)

المرور العكسي والخطوة

يحسب loss.backward() التدرجات عبر autograd، بينما يدفع optimizer.step() الأوزان قليلًا في اتجاه تقليل دالة الخسارة. وتشكل العمليتان معًا خطوة تعلّم واحدة.

    loss.backward()
    optimizer.step()

تتبّع الدقة

راقبوا التقدم من خلال عدّ التنبؤات الصحيحة. خذوا argmax من المخرجات للحصول على التصنيفات المتوقعة، وقارنوها بالتصنيفات، ثم اقسموا عدد التنبؤات الصحيحة على العدد الإجمالي.

    preds = outputs.argmax(dim=1)
    correct = (preds == labels).sum().item()
    acc = correct / labels.size(0)
    print("batch acc:", acc)

تحقق سريع

اختبروا معرفتكم بحلقة التدريب.

خلاصة: بناء CNNs وتدريبها

بنيتم CNN عبر إنشاء فئة فرعية من nn.Module تحتوي على طبقات nn.Conv2d وnn.MaxPool2d وnn.Linear وطريقة forward. ودرّبتموها باستخدام الحلقة التالية: zero_grad، والمرور الأمامي، وloss.backward()، وoptimizer.step()، كما تتبّعتم الدقة عبر argmax.

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

هل درس «بناء شبكات CNN وتدريبها في PyTorch» مجاني؟

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

ماذا ستتعلم في «بناء شبكات CNN وتدريبها في PyTorch»؟

‏nn.Conv2d وnn.MaxPool2d وnn.Linear وحلقة التدريب والمُحسِّن والخسارة وتتبع الدقة تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «بناء شبكات CNN وتدريبها في PyTorch»؟

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

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

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

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

  1. موترات PyTorch وAutograd
  2. مجموعات البيانات ومحملات البيانات المخصصة
  3. بناء شبكات CNN وتدريبها في PyTorch
  4. اكتشاف الأجسام باستخدام YOLOv8
← العودة إلى Learn AI with Python