محتويات الدورة

PyTorch / التخزين والاسترجاع والتنفيذ المحول / الدرس 14

قواميس الحالة والتحميل المراجع

استرجع دالة محددة بحالة مسماة متوافقة وسياسة تحميل صريحة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز state_dict من المعمارية والمعالجة ومتابعة التدريب.
  • حفظ المعاملات والمخازن الدائمة في لقطة مقصودة.
  • استخدام خيارات تحميل صريحة وفحص السلوك المسترجع.

لقاموس الحالة نطاق محدد

يربط state_dict معاملات الوحدة المسجلة ومخازنها الدائمة بقيم مسماة. ولا يعرف وحده معمارية Python أو كل معنى المعالجة المسبقة أو خريطة الوسم أو الحالة الكاملة اللازمة لاستئناف التدريب. ابن وحدة متوافقة واحفظ عقد المدخل والخرج مع حالتها. لا يثبت اسم ملف مألوف وأحجام موترات متطابقة استمرار معنى الأعمدة. قد يهم في نقطة تدريب المحسن والمجدول والمجاري العشوائية وموضع البيانات والتراكم الجزئي أيضاً. اختر المحتويات من حد الاسترجاع المقصود بدلاً من افتراض أثر واحد لكل الأغراض.

قد يتغير مرجع محفوظ ما لم تؤخذ لقطة مستقلة

ينسخ المثال حالة الوحدة عميقاً قبل دورة حفظ وتحميل في ذاكرة العملية نفسها. تحتوي خريطة الحالة مراجع موترات؛ فمجرد إبقاء الخريطة مع مواصلة التدريب ليس لقطة أفضل نموذج ثابتة تلقائياً. يلزم مخزن center المسجل مع الوزن والانحياز لإعادة الدالة. عند [3,2] يعطي طرح [1,1] القيمة [2,1] ومجموعها الموزون ثلاثة؛ ثم إضافة 0.5 تعطي 3.5. لا تدخل نقطة حفظ خارجية أو نموذج من نظام الملفات أو أثر محمل من الإنترنت.

python برنامج توضيحي للمعالج المركزي وفق وثائق PyTorch 2.14؛ لم تتوفر torch والخرج المتوقع مشتق
import io, copy
import torch
from torch import nn
class Centered(nn.Module):
    def __init__(self):
        super().__init__()
        self.weight = nn.Parameter(torch.tensor([[2.0,-1.0]],dtype=torch.float64,device="cpu"))
        self.bias = nn.Parameter(torch.tensor([0.5],dtype=torch.float64,device="cpu"))
        self.register_buffer("center",torch.tensor([1.0,1.0],dtype=torch.float64,device="cpu"))
    def forward(self,x):
        return (x-self.center) @ self.weight.t()+self.bias
model = Centered()
snapshot = copy.deepcopy(model.state_dict())
stream = io.BytesIO()
torch.save(snapshot,stream)
stream.seek(0)
state = torch.load(stream,map_location="cpu",weights_only=True)
restored = Centered()
restored.load_state_dict(state,strict=True)
restored.eval()
x = torch.tensor([[3.0,2.0]],dtype=torch.float64,device="cpu")
with torch.no_grad():
    output = restored(x)
print("keys", sorted(state))
print("output", output.tolist())
الناتج المتوقع
keys ['bias', 'center', 'weight']
output [[3.5]]

يوصف فقط أثر موترات ذاتي داخل الذاكرة. لا تعني weights_only الصريحة وخريطة CPU سلامة تحميل عامة أو توافقاً؛ ولم ينفذ حفظ أو تحميل أو استدعاء نموذج.

لا تستبدل خيارات التحميل سياسة ثقة

يطلب المثال map_location="cpu" وweights_only=True صراحة بدلاً من الاعتماد على قيمة افتراضية متطورة. يضيق سلوك التحميل المقيد الموثق المقبول، ولا يضمن كل مدخل خبيث أو ضخم أو يثبت موثوقية المصدر. لا تعطل القيود أو تسمح بكائنات عامة مجهولة لمجرد تحميل ملف غير مألوف. راجع مصدر الأثر وصيغته ومفاتيحه وأنواعه وأشكاله وحدود موارده واعتماداته المدعومة. لا يفتح المساق كائنات محفوظة مجهولة ولا يقدم شهادة أمنية أو ادعاء توافق تنفيذي.

مطابقة المفاتيح الصارمة فحص بين عدة فحوص

تفحص load_state_dict مع strict=True علاقة المفاتيح المسجلة المتوقعة وفق عقدها الموثق. ولا تثبت وحدات السمات أو ترتيب الفئات أو صلاحية التقييم. يحتاج تحميل جزئي مقصود سياسة صريحة للمفاتيح الناقصة وغير المتوقعة وتقييماً مستقلاً للسلوك الناتج. يكشف المرافق غياب center ويسترجع JSON ذاتياً ويفحص حساب الدالة. لا يعيد وصف الموتر أو مشاركة التخزين أو إصدارات الحفظ أو مطابقة المحسن أو تحميل torch. افصل فحص البنية عن فحص سلوك المدخل المعلوم وأظهرهما معاً.

python مثال مرافق حتمي بالمكتبة القياسية نُفذ فعلياً
import json
required = {"weight","bias","center"}
incomplete = {"weight":[2.0,-1.0],"bias":0.5}
print("missing state", sorted(required-incomplete.keys()))
complete = dict(incomplete,center=[1.0,1.0])
restored = json.loads(json.dumps(complete,allow_nan=False))
x = [3.0,2.0]
value = sum((a-c)*w for a,c,w in zip(x,restored["center"],restored["weight"]))+restored["bias"]
print(f"restored scalar={value:.2f}")
الناتج المتوقع
missing state ['center']
restored scalar=3.50

يفحص JSON المنفذ الحالة المسماة المطلوبة والدالة العددية المعلنة. وليس نقطة حفظ torch أو اختبار توافق حفظ.

افحص حد الاستدلال والمتابعة المسترجعين

حدد وضع الوحدة وسياق التدرج المقصودين، ثم قارن مدخلات خاماً معلومة عبر المعالجة إلى الخرج بالمرجع. أدرج قرب العتبة وغير المدعوم حيث يطلب القرار. عند استئناف التدريب قارن المدخل والتدرج وانتقال المحسن والجدول التالية، لا درجة استدلال واحدة فقط. سجل البيئة والملفات التي اختبرت بالضبط. يبقى البرنامج توضيحياً لغياب torch؛ ونفذ JSON وحساب عددي فقط. لم تشغل دورة state_dict أو محمل موتر أو نقطة إطار أو استدلال نموذج أو متابعة تدريب أثناء المراجعة.

الأخطاء الشائعة وإصلاحها

تغيرت حالة الأفضل المتذكرة أثناء تدريب لاحق

لماذا يحدث؟
احتفظت الخريطة بمراجع بدلاً من لقطة مستقلة.
كيف تصلحه؟
انسخ أو احفظ عند الحد المقصود بسياسة مراجعة.
كيف تتجنب تكراره؟
اختبر تغيير نموذج مضبوطاً بعد إنشاء اللقطة.

حُملت النقطة ولكن تغير معنى التنبؤ

لماذا يحدث؟
تغيرت المعمارية أو دلالات المدخل والخرج رغم توافق المفاتيح.
كيف تصلحه؟
تحقق من عقد النموذج والمعالجة كاملين.
كيف تتجنب تكراره؟
احفظ فحص حالة مسماة ومثال مدخل خام معلوم.

تجاوز خطأ محمل مقيد دون مراجعة

لماذا يحدث؟
عومل أثر غير مدعوم كسبب لإزالة قيود التحميل.
كيف تصلحه؟
أثبت المصدر الموثوق والصيغة المدعومة الموثقة أولاً.
كيف تتجنب تكراره؟
اختبر الحالة الناقصة وغير المتوقعة وغير المتوافقة والضخمة بسياسات صريحة.

اختبر فهمك

1. لماذا يحفظ center رغم أنه ليس معامل محسن؟

اعرض الحل المشروح

يطرحه المرور الأمامي قبل تطبيق الوزن. دون قيمته قد ينتج المدخل والمعاملات المتعلمة نفسيهما دالة أخرى. الحفظ والتحسين وظيفتان مختلفتان؛ فلا تكمل named_parameters وحدها حالة الاستدلال.

2. هل يثبت strict=True وweights_only=True ملاءمة الحزمة للمهمة؟

اعرض الحل المشروح

لا. يعالجان عقدي بنية وتحميل محددين، لا معنى الفئة أو الوحدة أو اكتمال المصدر أو تمثيل التقييم أو فائدة القرار. افحص تلك الخصائص منفصلة واختبر الدالة المسترجعة كاملة في البيئة المدعومة.

أهم ما تعلمته

  • يتبع نطاق الحالة هدف الاسترجاع.
  • التقط المراجع عمداً واحفظ المخازن الدائمة.
  • تحتاج الهوية والمصدر والتحميل والبنية والسلوك والجودة أدلة منفصلة.

المراجع الرسمية