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