الهدف: قراءة أبعاد الموتّر (Tensor) وتفادي أغلبية أخطاء الأشكال. المتطلبات: أساسيات NumPy.
الموتّر (Tensor) هو مصفوفة متعدّدة الأبعاد ومتجانسة. للعددي القياسي صفر محور، وللمتّجه محور واحد، وللمصفوفة محوران. الرتبة (Rank) ليست عدد العناصر، بل عدد المحاور.
| البيانات | الشكل المعتاد |
|---|---|
| جدول كثيف | (batch, features) |
| صور PyTorch | (batch, channels, height, width) |
| نصّ مُقسَّم إلى رموز (Tokens) | (batch, sequence_length) |
| Logits متعدّدة الأصناف | (batch, classes) |
import torch
x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4الدُّفعة تجمع عدة أمثلة تُعالج بالتوازي. تُنتج دُفعة صغيرة من 32 صورة تقديراً للتدرج أقل دقّة من المجموعة الكاملة، لكنّها أرخص بكثير. وقد يساعد هذا القدر الصغير من الضجيج على التعميم.
تكون الأوزان عادةً بنوع float32. أما العلامات التي تنتظرها CrossEntropyLoss فهي أعداد
صحيحة من نوع torch.long. كل بيانات عملية واحدة ينبغي أن تكون على الجهاز نفسه: CPU أو
CUDA أو مسرِّع آخر.
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().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]. المزلق
الرئيسي هو تبديل صامت للمحاور: قد تعمل الشيفرة، بينما تتعلّم الشبكة بنيةً لا معنى لها.