0Pricing
Learn AI with Python · درس

مجموعات البيانات ومحملات البيانات المخصصة

‏torch.utils.data.Dataset و__len__/__getitem__ وDataLoader والتحويلات وزيادة البيانات

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

إدخال البيانات إلى النموذج

يتطلب التدريب طريقة فعّالة لقراءة البيانات وتحويلها وتجميعها في دفعات. يوفّر PyTorch تجريدين: Dataset، الذي يعرف كيفية جلب عيّنة واحدة، وDataLoader، الذي يجمع العينات في دفعات ويخلط ترتيبها.

from torch.utils.data import Dataset, DataLoader

واجهة Dataset

يجب أن تطبّق الفئة الفرعية المخصّصة من Dataset طريقتين: __len__، لمعرفة عدد العينات، و__getitem__، لإعادة العيّنة الموجودة عند فهرس معيّن. يستدعي PyTorch هاتين الطريقتين لجلب البيانات.

تطبيق __len__

تُخبر __len__ PyTorch بحجم مجموعة البيانات، ليعرف عدد الفهارس الموجودة وعدد الدفعات التي تتكوّن منها الحقبة.

class ImageDataset(Dataset):
    def __init__(self, paths, labels):
        self.paths = paths
        self.labels = labels

    def __len__(self):
        return len(self.paths)

تطبيق __getitem__

تحمّل __getitem__ عيّنة واحدة وتعيدها، مع تصنيفها، عند إعطائها فهرسًا. وهنا تفتحون ملف صورة وتحولونه إلى موتر.

from PIL import Image

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        label = self.labels[idx]
        return img, label

لماذا نستخدم التحويلات؟

تختلف الصور الخام في الحجم ونطاق قيم البكسلات. توحّد التحويلات هذه الصور: إذ تغيّر حجمها إلى شكل ثابت، وتحولها إلى موتر، وتطبّع قيم البكسلات حتى يتدرب النموذج بثبات.

from torchvision import transforms

transforms.Compose

تربط transforms.Compose عدة تحويلات في مسار معالجة واحد يُطبَّق بالترتيب. ومن السلاسل الشائعة: Resize ثم ToTensor ثم Normalize.

tf = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225])
])

فهم التحويلات

يثبّت Resize الحجم المكاني؛ ويحوّل ToTensor صورة PIL إلى موتر ويحوّل مقياس البكسلات إلى [0,1]؛ أما Normalize فيزيح كل قناة ويغيّر مقياسها للوصول إلى متوسط صفري وتباين يساوي واحدًا، ما يسرّع التقارب.

تطبيق التحويلات في Dataset

مرّروا التحويل إلى مجموعة البيانات وطبّقوه داخل __getitem__، حتى تُعالج كل عيّنة مسبقًا بطريقة متسقة عند جلبها.

class ImageDataset(Dataset):
    def __init__(self, paths, labels, transform):
        self.paths, self.labels, self.transform = paths, labels, transform

    def __getitem__(self, idx):
        img = Image.open(self.paths[idx]).convert("RGB")
        return self.transform(img), self.labels[idx]

تغليف البيانات داخل DataLoader

يحوّل DataLoader Dataset إلى كائن قابل للتكرار من الدفعات. اضبطوا batch_size للتحكم في عدد العينات في كل خطوة، واستخدموا shuffle=True لترتيب العينات عشوائيًا في كل حقبة، وهو أمر مهم للتدريب.

dataset = ImageDataset(paths, labels, tf)
loader = DataLoader(dataset, batch_size=32, shuffle=True)

num_workers للتسريع

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

loader = DataLoader(
    dataset,
    batch_size=32,
    shuffle=True,
    num_workers=4
)

التكرار على الدفعات

كرّروا على DataLoader للحصول على موترات مجمّعة في دفعات. تعيد كل عملية تكرار (images, labels)، حيث يكون شكل images هو [batch_size, channels, H, W]، لتصبح جاهزة للنموذج.

for images, labels in loader:
    print(images.shape)  # torch.Size([32, 3, 224, 224])
    break

تحقق سريع

اختبروا معرفتكم بمسار معالجة البيانات.

خلاصة: Datasets وDataLoaders

أنشأتم Dataset مخصّصًا باستخدام __len__ و__getitem__، وعالجتم الصور مسبقًا باستخدام transforms.Compose ‏(Resize وToTensor وNormalize)، ثم غلّفتموه داخل DataLoader باستخدام batch_size وshuffle وnum_workers لتزويد النموذج بالدفعات بكفاءة.

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

هل درس «مجموعات البيانات ومحملات البيانات المخصصة» مجاني؟

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

ماذا ستتعلم في «مجموعات البيانات ومحملات البيانات المخصصة»؟

‏torch.utils.data.Dataset و__len__/__getitem__ وDataLoader والتحويلات وزيادة البيانات تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «مجموعات البيانات ومحملات البيانات المخصصة»؟

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

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

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

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

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