الموترات وأشكالها ودُفعات البيانات

2 دقيقة

الهدف: قراءة أبعاد الموتّر (Tensor) وتفادي أغلبية أخطاء الأشكال. المتطلبات: أساسيات NumPy.

الموتّر (Tensor) هو مصفوفة متعدّدة الأبعاد ومتجانسة. للعددي القياسي صفر محور، وللمتّجه محور واحد، وللمصفوفة محوران. الرتبة (Rank) ليست عدد العناصر، بل عدد المحاور.

البياناتالشكل المعتاد
جدول كثيف(batch, features)
صور PyTorch(batch, channels, height, width)
نصّ مُقسَّم إلى رموز (Tokens)(batch, sequence_length)
Logits متعدّدة الأصناف(batch, classes)
python
import torch

x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4

الدُّفعة (Batch) والدُّفعة الصغيرة (Mini-batch)

الدُّفعة تجمع عدة أمثلة تُعالج بالتوازي. تُنتج دُفعة صغيرة من 32 صورة تقديراً للتدرج أقل دقّة من المجموعة الكاملة، لكنّها أرخص بكثير. وقد يساعد هذا القدر الصغير من الضجيج على التعميم.

النوع والجهاز

تكون الأوزان عادةً بنوع float32. أما العلامات التي تنتظرها CrossEntropyLoss فهي أعداد صحيحة من نوع torch.long. كل بيانات عملية واحدة ينبغي أن تكون على الجهاز نفسه: CPU أو CUDA أو مسرِّع آخر.

python
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = x.to(device=device, dtype=torch.float32)

انضباط الأشكال

عند كل طبقة، اكتب الشكل المتوقّع قبل الشيفرة. مع طبقة كثيفة Linear(128, 10)، ينبغي أن يكون آخر محور دخل بقيمة 128. استخدم reshape بحذر، وفضِّل flatten(start_dim=1) للحفاظ على محور الدُّفعة.

المزالق

  • الخلط بين NHWC وNCHW.
  • حذف محور الدُّفعة دون قصد باستخدام squeeze().
  • إرسال النموذج إلى GPU مع ترك البيانات على CPU.
  • تمرير علامات float32 إلى خسارة تنتظر مؤشرات أصناف.

تحقّق سريع

ما شكل 64 صورة RGB بحجم 32×32 في PyTorch؟ أيّ محور تعتبره الطبقة الكثيفة بُعد الإدخال؟

الأجوبة

(64, 3, 32, 32). تستخدم الطبقة الكثيفة المحور الأخير.

نشاط الإتقان — تدقيق الأشكال

انطلق من X.shape = (32, 3, 64, 64). اجعل الموتّر يمرّ عبر التفاف يُنتج 16 قناة، ثم اختزال مكاني إلى النصف، ثم تجميع شامل (Global pooling)، ثم رأس تصنيف بـ 7 أصناف. اكتب كل شكل وثلاث عبارات assert بلغة Python. النجاح: يبقى محور الدُّفعة 32 وتكون النتيجة (32, 7).

عقد الأشكال لدُفعة من الصور

القراءة: يعبر المحور B كامل الشبكة؛ ولا تتحوّل سوى أبعاد التمثيل. قبل التدريب، تحقّق صراحة من X.ndim ومن ترتيب القنوات ومن تطابق logits.shape[0] مع y.shape[0]. المزلق الرئيسي هو تبديل صامت للمحاور: قد تعمل الشيفرة، بينما تتعلّم الشبكة بنيةً لا معنى لها.