مجموعات البيانات ومحملات البيانات المخصصة
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 transformstransforms.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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- موترات PyTorch وAutograd
- مجموعات البيانات ومحملات البيانات المخصصة
- بناء شبكات CNN وتدريبها في PyTorch
- اكتشاف الأجسام باستخدام YOLOv8