PyTorch / حالة التدريب وواجهات المعمارية / الدرس 10
التضمينات والسلاسل والأطوال
ميز هوية الرمز وحالة جدول البحث المتعلمة والحشو وعقود التخطيط المتكرر.
في هذه الصفحة
أهداف الدرس
- استخدام معرّفات صحيحة بمفردات تضمين وسياسة حشو صريحتين.
- تجميع أو حزم المواضع الصالحة المعلنة فقط.
- قراءة batch_first وأشكال الحالة المخفية وفق الواجهة المحددة.
يربط جدول التضمين المعرّفات لا المقادير العددية
تخزن nn.Embedding صفوفاً متعلمة وتسترجعها بفهارس صحيحة مدعومة. المعرّف موضع مفردات، لا قياساً تعرف المسافة بين أرقامه التشابه. احفظ خريطة الرموز إلى المعرّفات وسياسة الفئة المجهولة وإصدار المفردات مع النموذج. تحدث التدرجات قيم الجدول العائمة المختارة بدلاً من جعل الفهارس الصحيحة مدخلات عادية قابلة للتفاضل. تقدم padding_idx اصطلاح تدرج وتهيئة محدداً لصف واحد؛ ولا تحجب تلقائياً كل تجميع أو انتباه أو تحديث متكرر أو خسارة لاحقة. قد يختلف صف حشو محمل يدوياً أيضاً عن التهيئة الصفرية الافتراضية.
افحص الدفعة ونتيجة البحث كاملتين
يسند البرنامج التوضيحي أربعة صفوف تضمين ذات بعدين صراحة، ومنها صف حشو صفري. للسلسلتين المحشوتين طولان صالحان اثنان وواحد؛ فشكل البحث (2,3,2). يزيل قناع صريح المواضع غير الصالحة قبل متوسط كل سلسلة، فينتج [2,3] و[5,6]. المقام هو طول كل سلسلة الصالح لا العرض المحشو. هذا حساب جدول ثابت لا تمثيل دلالي متعلم. يحتاج مدخل بطول صفر سياسة مدعومة أخرى؛ ويفترض المثال أطوالاً موجبة ولا يقسم على صفر.
import torch
from torch import nn
from torch.nn.utils.rnn import pack_padded_sequence
embedding = nn.Embedding(4,2,padding_idx=0,dtype=torch.float64,device="cpu")
with torch.no_grad():
embedding.weight.copy_(torch.tensor([[0.0,0.0],[1.0,2.0],[3.0,4.0],[5.0,6.0]],dtype=torch.float64,device="cpu"))
tokens = torch.tensor([[1,2,0],[3,0,0]],dtype=torch.long,device="cpu")
lengths = torch.tensor([2,1],dtype=torch.long,device="cpu")
values = embedding(tokens)
valid = torch.arange(tokens.shape[1],device="cpu")[None,:] < lengths[:,None]
pooled = values.masked_fill(~valid[:,:,None],0.0).sum(dim=1)/lengths[:,None]
packed = pack_padded_sequence(values,lengths,batch_first=True,enforce_sorted=False)
print("embedding shape", tuple(values.shape))
print("valid means", pooled.tolist())
print("packed data shape", tuple(packed.data.shape))
embedding shape (2, 3, 2)
valid means [[2.0, 3.0], [5.0, 6.0]]
packed data shape (3, 2)
تحدد صفوف التضمين الثابتة والأطوال الموجبة على CPU والقناع الصريح الأشكال والمتوسطات. لم ينفذ تضمين أو دالة حزم أو نموذج متكرر.
الحزم واجهة ذات قيود ترتيب
تستهلك pack_padded_sequence القيم المحشوة والأطوال وفق batch_first وخيارات الفرز. إذا قدمت الأطوال كموتر يهم شرط CPU الموثق ولو استخدم جزء آخر من النموذج جهازاً مختلفاً؛ ويبقى المساق على CPU بالكامل. تسمح enforce_sorted=False بسياسة الفرز الداخلي للدالة بدلاً من طلب ترتيب تنازلي من المستدعي. لبيانات PackedSequence.data صف لكل موضع صالح هنا، فشكلها (3,2). لا تعامل ترتيب تخزينها كالدفعة المستطيلة الأصلية أو تفترض إمكان تسطيح قائمة أهداف منفصلة اعتباطياً. احفظ المحاذاة عبر واجهات فك الحزم والفهرسة الموثقة.
لأعلام تخطيط التكرار معنى محدود
تغير batch_first تخطيط تسلسل المدخل والخرج الموثق للوحدات المتكررة، لكنها لا تغير عادة تخطيط الحالة المخفية إلى دفعة أولاً. اقرأ عقد RNN أو GRU أو LSTM المعين، شاملاً أبعاد الطبقات والاتجاهات وأي حالة خلية منفصلة. قد يلائم السياق ثنائي الاتجاه سلسلة مرصودة كاملة ولا يلائم تنبؤاً سببياً يسبق وجود المستقبل. الحزم والأقنعة تمثيل للسياق الصالح، لا إثبات لمشروعية توقيت التنبؤ. احفظ هويات السلاسل وحدود تصفيرها والحالة الصالحة الأخيرة المقصودة عند بناء مصنف أو معالج تدفق.
اختبر الأطوال والحشو كبيانات أساسية
يستخدم مرافق القوائم قيم حشو بارزة لفحص تجاهل متوسطات المواضع الصالحة وأعدادها آثار التخزين. أدرج أطوالاً مختلفة ووصف طول غير صالح وفراغاً غير مدعوم وبادئة صالحة واحدة بأشكال حشو مختلفة. تحقق هل مزجت عملية لاحقة الحشو في حالة قبل حجب الخسارة فقط. يبقى برنامج الإطار توقع PyTorch 2.14 غير منفذ لغياب torch. يفحص المرافق المنفذ اختيار القوائم وحسابها فقط؛ ولا يختبر تضمينات أو ترتيب حزم أو حالات متكررة مخفية أو تجزئة رموز أو جودة سلسلة متعلمة.
sequences = [[1.0,3.0,99.0],[5.0,99.0,99.0]]
lengths = [2,1]
assert all(0 < n <= len(row) for row,n in zip(sequences,lengths))
means = [sum(row[:n])/n for row,n in zip(sequences,lengths)]
flattened = [value for row,n in zip(sequences,lengths) for value in row[:n]]
print("valid means", means)
print("valid positions", len(flattened))
print("padding excluded", 99.0 not in flattened)
valid means [2.0, 5.0]
valid positions 3
padding excluded True
يفحص المرافق اختيار مواضع صالحة صراحة من قوائم؛ ولا يعيد ترتيب PackedSequence أو تدرجات التضمين أو حساب حالة متكررة.
الأخطاء الشائعة وإصلاحها
تغير متوسط السلسلة بعد إضافة حشو
- لماذا يحدث؟
- دخل العرض المحشو أو القيم غير الصالحة في التجميع.
- كيف تصلحه؟
- احجب القيم واستخدم مقام الطول الصالح المقصود.
- كيف تتجنب تكراره؟
- قارن البادئات الصالحة المتطابقة بأطوال حشو وقيم مختلفة.
فقد هدف محزوم محاذاته مع خرجه
- لماذا يحدث؟
- أُهمل ترتيب التخزين أو وصف الفرز.
- كيف تصلحه؟
- حاذ الأهداف عبر عقد الحزم أو فكه الموثق.
- كيف تتجنب تكراره؟
- احفظ مثالاً صغيراً مختلف الأطوال بمواضع قابلة للتحديد.
أعيد تشكيل حالة مخفية وفق batch_first بلا فحص
- لماذا يحدث؟
- افتُرض امتداد نطاق علم التسلسل إلى الحالات المخفية.
- كيف تصلحه؟
- اقرأ واحفظ أبعاد الطبقة والاتجاه والدفعة والمخفي الفعلية.
- كيف تتجنب تكراره؟
- افحص شكل الحالة المخفية مستقلاً عن تخطيط المدخل.
اختبر فهمك
1. لماذا يساوي متوسط التضمين الأول [2,3]؟
اعرض الحل المشروح
معرّفاه الصالحان واحد واثنان وصفاهما الثابتان [1,2] و[3,4]. ينتج الجمع [4,6] والقسمة على الطول الصالح اثنين [2,3]. يستبعد صف الحشو. تعطي القسمة على عرض محشو ثلاثة نتيجة أخرى تعتمد على الحشو.
2. هل تلغي padding_idx=0 الحاجة لأقنعة الانتباه والخسارة؟
اعرض الحل المشروح
لا. يخص دورها الموثق صف حشو التضمين وسلوك تدرجه. تملك العمليات اللاحقة عقود مواضع صالحة وتدفق معلومات خاصة بها. قد يؤثر متجه صفري أيضاً في التطبيع أو تحديث التكرار أو المقام؛ فافحص كل حد مناسب واحجبه صراحة.
أهم ما تعلمته
- معرّفات الرموز وصفوف التضمين ومعناها الدلالي أمور منفصلة.
- تحدد الأطوال والأقنعة التجميع والمحاذاة الصالحين.
- لا يعوض علم التخطيط عقد الحالة المتكررة الكامل.