تخطَّ إلى المحتوى

CNN

الشبكة العصبية الالتفافية (CNN) CNN

CNN شبكة عصبية تستخدم طبقات التفاف (Conv2d) لاستخلاص سمات مكانية من صور أو بيانات شبكية، أكثر كفاءة من MLP في الرؤية الحاسوبية.

الشبكة الالتفافية (Convolutional Neural Network) تطبّق مرشحات (filters) صغيرة قابلة للتعلّم عبر الصورة لاستخراج سمات مكانية (حواف، أنسجة، أشكال)، ثم تكدّس طبقات التفاف + pooling لاستخلاص سمات أعقد تدريجيًا. أكثر كفاءة من MLP للصور: MLP بطبقة كثيفة على صورة 224×224×3 يحتاج ملايين المعاملات، CNN بعشرات الآلاف فقط.

المكوّنات الأساسية: Conv2d (التفاف ثنائي الأبعاد — kernel صغير مثل 3×3)، MaxPool2d (اختزال المساحة — أخذ أكبر قيمة في نافذة)، BatchNorm2d (تطبيع لكل دفعة)، ReLU، وأخيرًا طبقة Flatten + Linear للتصنيف.

أشهر المعماريات: LeNet، AlexNet، VGG (تسلسل طبقات التفاف)، ResNet (residual connections — أتاح الشبكات العميقة جدًا)، EfficientNet (تحسين التوازن بين الدقة والكفاءة). في PyTorch كلّها متاحة في torchvision.models كـ pre-trained models — نقطة انطلاق ممتازة لتطبيق transfer learning.

الصياغة

Conv2d(in_channels, out_channels, kernel_size=3, padding=1)
MaxPool2d(kernel_size=2, stride=2)
BatchNorm2d(num_features)

# تكرار: Conv → BN → ReLU → Pool
# ثم Flatten → Linear للتصنيف

📄 مثال

import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 32, kernel_size=3, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(2),                 # 32x32 -> 16x16
            nn.Conv2d(32, 64, kernel_size=3, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(),
            nn.MaxPool2d(2),                 # 16x16 -> 8x8
        )
        self.classifier = nn.Sequential(
            nn.Flatten(),
            nn.Linear(64 * 8 * 8, 128),
            nn.ReLU(),
            nn.Linear(128, num_classes),
        )

    def forward(self, x):
        return self.classifier(self.features(x))

أهم النقاط

النقطةالوظيفة
Conv2dطبقة التفاف — تستخلص سمات مكانية بمصفوفة kernel
MaxPool2dاختزال مساحة الصورة — يقلل الأبعاد مع الاحتفاظ بأبرز السمات
Receptive Fieldالمنطقة من الصورة الأصلية التي تراها خلية في طبقة معينة
Stride / Paddingخطوة الحركة ومساحة الحافة — تتحكم في حجم المُخرج

💡 نصائح عملية

  • ابدأ بـ ResNet18 pre-trained من torchvision.models حين بياناتك محدودة — نقل التعلم (transfer learning) غالبًا يتفوق على بناء CNN من الصفر، لكن يعتمد ذلك على مدى قرب مهمتك من بيانات الـ pre-training وحجم بياناتك المتاحة
  • استخدم kernel صغير (3×3) مكدّس بدل kernel كبير (7×7) واحد — عدد معاملات أقل، قدرة تمثيلية أعلى

⚠️ أخطاء شائعة

  • نسيان BatchNorm أو ReLU بين طبقات الالتفاف — الشبكة تعمل لكن التقارب أبطأ بكثير
  • حساب output dimension يدويًا بشكل خاطئ — Conv2d و MaxPool2d يغيّران الأبعاد، تتبّع الحساب بدقة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: PyTorch Documentation