الوحدة 4 — Dataset وDataLoader: تغذية التدريب
النموذج الذي بنيناه في الوحدة الثالثة يحتاج شيئًا واحدًا ليتعلّم:
بيانات. لكن كيف تصل تلك البيانات إليه يُقرِّر أكثر ممّا تظنّ من
سرعة التدريب ومن صوابه. هذه الوحدة تُبنى على مفهومين: Dataset يعرف
كيف يقرأ مثالًا واحدًا، وDataLoader يعرف كيف يُقدّمه في حزم مُوازِية
وجاهزة للنموذج.
Dataset: بروتوكول من طريقتين
كلّ صنف يرث من torch.utils.data.Dataset يُعرِّف طريقتين:
from torch.utils.data import Dataset
class MonJeu(Dataset):
def __init__(self, ...):
...
def __len__(self) -> int:
return N # عدد الأمثلة
def __getitem__(self, idx: int):
# يعود لكل استدعاء بمثال جاهز للنموذج
return x, y
هذا كلّ ما يطلبه PyTorch. لا مصفوفة عملاقة تُحمَّل في الذاكرة، ولا
تكرار في الطبعات المسبقة: DataLoader يستدعي __getitem__ عند الحاجة،
وأنت حرّ في القراءة من القرص، من قاعدة بيانات، من واجهة برمجية بعيدة،
أو من الذاكرة إذا كانت البيانات صغيرة.