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

DataLoader

DataLoader في PyTorch DataLoader

DataLoader يغلّف Dataset ويُنتج دفعات (batches) مع خلط، تزامن المعالجات، ومعالجة مسبقة — يبسّط حلقة التدريب.

DataLoader غلاف حول كائن Dataset يقدّم: تقسيم البيانات إلى دفعات (batches) بالـ batch_size المطلوب، خلط (shuffle) البيانات في كل epoch إذا طلبت، تحميل متوازٍ عبر num_workers، pin_memory لتسريع النقل إلى GPU، ومعالجة مسبقة مخصّصة عبر collate_fn.

الاستخدام النموذجي: ابنِ Dataset مخصّصًا (يُرجع (X, y) لكل index)، ثم مرّره لـ DataLoader، ثم في حلقة التدريب استخدم for batch in loader: x, y = batch. الـ batch يكون tensor بحجم (batch_size, ...features).

معلمات مهمة: batch_size (مثل 32 أو 64)، shuffle=True للتدريب (يحسّن التعمّم)، shuffle=False للتقييم (ثبات النتائج)، num_workers>0 لتسريع التحميل، drop_last=True لتجاهل آخر batch إن كان أصغر (يحسّن ثبات الإحصائيات).

الصياغة

from torch.utils.data import DataLoader

loader = DataLoader(
    dataset,
    batch_size=32,
    shuffle=True,        # تدريب فقط
    num_workers=4,
    pin_memory=True,     # GPU أسرع
    drop_last=False
)

for x, y in loader:
    # x.shape == (32, ...)
    # y.shape == (32,)
    ...

📄 مثال

import torch
from torch.utils.data import DataLoader, TensorDataset

# Dataset صناعي للتجربة
X = torch.randn(1000, 4)
y = (X.sum(dim=1) > 0).long()   # تصنيف ثنائي

dataset = TensorDataset(X, y)
loader = DataLoader(
    dataset, batch_size=32, shuffle=True, num_workers=0
)

print(f"عدد الدفعات: {len(loader)}")
for x_batch, y_batch in loader:
    print(f"شكل X: {x_batch.shape}, شكل y: {y_batch.shape}")
    break  # أول دفعة فقط للتوضيح

أهم النقاط

النقطةالوظيفة
batch_sizeعدد العيّنات لكل دفعة — الأكبر = تدريب أسرع لكن ذاكرة أكثر
shuffleخلط البيانات — True للتدريب، False للتقييم
num_workersعمليات متوازية لتحميل البيانات — 0 للـ debug، 2-8 في الإنتاج
pin_memoryتثبيت في ذاكرة CPU الصفحية — يسرّع النقل إلى GPU

💡 نصائح عملية

  • num_workers > 0 على Linux/WSL يعطي تسريعًا واضحًا — على Windows أحيانًا يسبب مشاكل، اختبر بـ num_workers=0 أولاً
  • احفظ Dataset preprocessing داخل __getitem__ بدل تحميل كل البيانات في الذاكرة — مهم للبيانات الضخمة

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

  • shuffle=True في التقييم/الاختبار — النتائج تتغير بين التشغيلات ويصعب إعادة الإنتاج
  • batch_size كبير جدًا لـ GPU محدود الذاكرة — خطأ CUDA out of memory، خفّض الحجم أو تراكم التدرّجات

خصائص ذات صلة

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

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