مرحبًا ومرحبًا بكم في برنامج Python التعليمي هذا.
حسنًا ، لدينا وظيفة أخيرة يجب تنفيذها في فئة ذاكرة إعادة التشغيل.
هذه هي الوظيفة البسيطة.
وذلك بالطبع للحصول على بعض العينات العشوائية من ذاكرتنا.
وبالتالي ، ستعيد هذه الدالة هذه العينات العشوائية.
حسنا.
لذلك دعونا ننفذها.
سوف نسميها عينة.
ها نحن ذا.
وهذه الوظيفة تأخذ حجتين كمدخلات.
الأول ، كالعادة ، النفس.
هدفنا المستقبلي من فئة ذاكرة إعادة التشغيل.
والحجة الثانية هي ، هل يمكنك محاولة التخمين؟
حسنًا ، نحن نأخذ بعض العينات ، بحجم ثابت ، وبالتالي نحتاج إلى اختيار حجم عيناتنا.
وبشكل أكثر دقة ، نسميها حجم الدفعة.
هذا هو الاسم الذي سنطلقه على الوسيطة الثانية ، حجم الدفعة.
وها نحن ذا.
لدينا حجتان ويمكننا الآن تنفيذ دالة العينة.
لذا الآن أريد فقط أن أحذرك ، سيحصل هذا على القليل من التقنية ، لكنني سأبذل قصارى جهدي في التوضيح.
لذلك سنبدأ بإنشاء متغير العينات.
هذا هو المتغير الذي سيحتوي على عينات من الذاكرة.
حسنا.
حتى العينات متساوية.
والآن كيف سنحصل على هذه العينات؟
حسنًا ، أولاً وقبل كل شيء ، علينا أن نأخذ ذاكرتنا لأننا نحصل على هذه العينات من ذاكرتنا.
ثم سنحتاج على الأرجح إلى حجم الدُفعة لأن العينات التي نريد الحصول عليها تحتوي على عناصر حجم الدُفعة.
لذلك نحن بحاجة إلى ذاكرة ، ونحتاج إلى حجم دفعة ، ثم نحتاج إلى بعض حيل PyTorch أو Python للحصول على التنسيق
الجيد لهذه العينات.
إذن ما سأفعله ، سأكتب سطرًا من التعليمات البرمجية ثم سأشرحها عنصرًا
عنصرًا.
لنفعلها اذا.
سأبدأ بأخذ وظيفة مضغوطة.
سأشرح قريبًا ما يفعله.
وداخل وظيفة zip هذه ، سأضيف نجمة.
سأقوم بتوسيع ذلك أيضًا.
عينة النجمة والنقطة العشوائية.
عشوائية جدًا ، كما قد تكون خمنت ، هي المكتبة العشوائية التي قمنا باستيرادها هنا.
هذا هو السبب الرئيسي الذي دفعنا لاستيراد هذه المكتبة العشوائية ، لأننا كنا نأخذ بعض العينات العشوائية.
لذا من هذه المكتبة العشوائية ، سنستخدم دالة العينة.
إذن هذه هي المتغيرات لدينا وهذه دالة.
لذا سأضيف بعض الأقواس.
والآن كما ترى ، فإن العينة هي دالة وعلينا إدخال بعض المتغيرات.
لذا كما ترى ، فإن الحجة الأولى هي الذات.
وفي الواقع ، عند الحديث عن الذات ، هذا يتوافق مع ذاكرة الذات ، وذاكرة مثالنا المستقبلي ، كائن
من فئة ذاكرة إعادة العرض.
لذا سأضيف هنا تلك الذكرى.
ثم الحجة الثانية ، كما قد تكون خمنت ، هي حجم الدفعة التي نريد أن نأخذها
عشوائيًا من ذاكرتنا وأننا أعطيناها اسمًا بحجم الدُفعة.
لذا فإن الحجة الثانية ستكون حجم الدُفعة.
حسنا.
لذلك تمت كتابة سطر الكود وسأشرح الآن ما يفعله.
لذلك أولاً وقبل كل شيء ، باستخدام وظيفة العينة العشوائية هذه ، نأخذ بعض العينات العشوائية من
الذاكرة التي لها حجم ثابت لحجم الدُفعة.
لذلك هذا مفهوم.
ولكن ما الذي تفعله وظيفة zip store هذه؟
حسنًا ، لا يوجد لغز حول هذا الموضوع.
إنها مثل وظيفة إعادة التشكيل.
لذا ، على سبيل المثال ، سأضيف القليل من الشائع هنا فقط لشرح أنني سأزيله.
لنفترض ، على سبيل المثال ، أن لدينا قائمة بالعناصر التالية.
على سبيل المثال ، أول واحد ، اثنان ، ثلاثة ، ثم العنصر الثاني ، أربعة ، خمسة ، ستة.
إذن لدينا قائمة من مجموعتين من ثلاثة عناصر ، واحد ، اثنان ، ثلاثة ، أربعة ، خمسة ، ستة.
حسنًا ، إذا قمت بتطبيق وظيفة zip مع وجود النجمة عليها ، حسنًا ، ماذا ستصبح؟
لذا فإن قائمة النجوم المضغوطة ستكون مساوية لقائمة جديدة ، ولكن بشكل مختلف.
وهذا الشكل المختلف سيكون أربعة ، ثم اثنان ، وثلاثة ، ثم خمسة ، وستة.
حسنا.
هذا ما يفعله بالضبط.
إنها فقط تعيد تشكيل قائمتك.
تمام.
والآن بعد أن فهمت ما تفعله قائمة النجوم المضغوطة هذه ، حسنًا ، الآن دعنا نشرح لماذا يتعين علينا القيام
بذلك.
لذا كما فهمت ، سنضيف الأحداث إلى الذاكرة وستكون الأحداث بالشكل ، الحالة
أولاً ، ثم الفعل ، ثم المكافأة.
لكن بالنسبة للخوارزمية الخاصة بنا ، لا نريد هذا التنسيق.
نريد في الواقع أن تحتوي عيناتنا على التنسيق التالي ، وهو تنسيق يتكون من ثلاث عينات ، وعينة
واحدة للحالة ، وعينة واحدة للإجراءات ، وعينة واحدة للمكافأة.
لذلك ، على سبيل المثال ، لنفترض أن هذه 1 إلى 3 هي الحالة الأولى ، والعمل الأول ، والمكافأة واحد ، ثم صر على
اتخاذ إجراء ومكافأة اثنين.
حسنًا ، ما نريده هو دفعة واحدة لكل دفعة واحدة للحالة الأولى والبقاء اثنتين من الدُفعة لإجراء واحد
واحد في العمل الثاني ودفعة ثالثة للمكافأة الأولى.
وكنا اثنان.
هذا هو التنسيق الذي سيكون متوقعًا بعد ذلك لأننا سنلف هذه الدُفعات في
متغير PyTorch.
وتذكر أن متغير بايثون هو متغير يحتوي على موتر وتدرج.
وذلك لكي نتمكن من الاشتقاق فيما يتعلق بالموتر ، لكي نتمكن من الاشتقاق
بالنسبة للموتر ، نحتاج إلى بنية متغير يحتوي على موتر وتدرج.
مرة أخرى ، هكذا يعمل PyTorch.
للتلخيص ، نقوم بإنشاء دفعة واحدة لكل حالة من الإجراءات والمكافآت ، وبعد ذلك سنضع كل مجموعة من
هذه الدُفعات بشكل منفصل في بعض متغيرات PyTorch ، والتي سيحصل كل منها على تدرج
حتى نتمكن في النهاية من تكون قادرة على التفريق بين كل منهم.
حسنا.
إذن هذا هو الغرض من هذه الوظيفة.
لذلك اسمحوا لي فقط إزالة هذا التعليق.
والآن الشيء الوحيد الذي يتعين علينا القيام به هو إعادة العينات.
لذلك كما أوضحت للتو ، لا يمكننا إرجاع العينات مباشرة لسبب بسيط هو أننا
نريد وضع العينات في متغير PyTorch.
للقيام بذلك لكل عينة ، سنستخدم وظيفة الخريطة وستقوم وظيفة الخريطة
هذه بالتخطيط من العينات للمس المتغيرات التي ستحتوي على موتر وتدرج.
كما ترى ، تأخذ وظيفة الخريطة هذه العديد من الحجج.
الوسيطة الأولى هي دالة ، وستكون هذه الوظيفة هي الوظيفة التي ستحول العينات إلى بعض
المتغيرات التي تم تدريسها.
والحجة الثانية هي ما نريد تطبيق هذه الدالة عليه.
إذن هذه ستكون حجة هذه الوظيفة.
وبالتالي ، ماذا سيكون؟
هذا بالطبع سيكون العينات.
إذن ، الحجة الثانية هنا ستكون العينات ، ولكن بعد ذلك دعنا نحدد الوظيفة التي نريد
تطبيق كل عينة عليها.
لتعريف دالة هنا ، نحتاج أولاً إلى تسمية الدالة التي سنسميها Lambda.
هذا مجرد اسم لإعطاء lambda ، ثم x ، والتي ستكون متغير هذه الدالة.
هذا هو الاسم الذي أعطيه للمتغير ثم القولون.
وهنا نعطي التعبير عن الدالة.
هذا ما نريد أن تعيده دالة lambda.
وبالتالي ، ما سيكون عليه ، حسنًا ، من المفترض أن يكون شيئًا يتحول أو يأخذ عينات إلى
متغير شعلة.
وللقيام بذلك ، ذكرنا ذلك بالفعل في بعض البرامج التعليمية السابقة حيث لدينا الوظيفة المتغيرة
لذلك.
ستجعل الوظيفة المتغيرة هذا التحويل من موتر الشعلة إلى متغير يحتوي على هذا
الموتر والتدرج.
لذا فإن أول شيء سأضيفه هنا هو متغير متغير سأقوم بداخله بتحويل X لأن
X ستكون العينات بمجرد تطبيق لامدا على العينات.
لكن هذا ليس كل شيء.
هناك شيء تقني أخير نحتاج إلى تنفيذه.
إنها حقيقة أنه بالنسبة لكل دفعة موجودة في العينة ، على سبيل المثال ، مجموعة
الإجراءات واحد واثنين وثلاثة والإجراءات الأخرى ، يتعين علينا ربطها فيما يتعلق بالبعد
الأول الذي يتوافق مع الولاية.
ولماذا علينا أن نجعل هذا التسلسل؟
إنه فقط لكل شيء ليكون محاذيًا بشكل جيد.
أي أنه في كل صف تتطابق الحالة والعمل والمكافأة في نفس الوقت.
T حتى نحصل في النهاية على قائمة بالدُفعات المحاذاة جيدًا وكل دفعة عبارة عن متغير pytorch.
فكيف يمكننا أن نجعل هذا التسلسل؟
حسنًا ، نحتاج إلى استخدام وظيفة القط من مكتبة الشعلة.
سنضيف هنا الشعلة التي نضيف إليها تلك القطة التي تنطبق على X.
ولكن بعد ذلك في وظيفة cat هذه ، نحتاج إلى تحديد البعد الذي نريد أن نجعل هذا التسلسل
بالنسبة له.
وكما ذكرت للتو ، هذا هو البعد الأول الذي يحتوي على مؤشر صفري.
وها قد بدأنا.
لدينا وظيفتنا جاهزة.
ستأخذ وظيفة lambda هذه العينات ، وتسلسلها فيما يتعلق بالبعد الأول ، ثم في
النهاية نقوم بتحويل المستشعرات إلى بعض متغيرات الشعلة التي تحتوي على مستشعر وتدرج ،
لذلك لاحقًا عندما نطبق شبكة عشوائية بمعنى أننا سوف تكون قادرة على التفاضل لتحديث
الأوزان.
حسنًا ، هذه الوظيفة جاهزة.
ثم هنا ، بصفتنا الوسيطة الثانية لدالة الخريطة ، نحتاج إلى تحديد ما نريد تطبيق دالة lambda
هذه على جميع العينات التي نذهب إليها ، وسنطبق دالة lambda هذه على جميع العينات حتى نتمكن
في النهاية من الحصول على قائمة بالدُفعات حيث تكون كل دفعة عبارة عن متغير pytorch.
حسنا.
لذلك كان ذلك تقنيًا تمامًا ، ولكن الآن على الأقل كل شيء سيعمل.
حسنًا ، لن نستخدم هذه التقنية بعد ذلك.
نحن نستخدمه هنا فقط.
لذلك إذا كنت لا ترغب في الحصول على فهم عميق للتفاصيل الفنية هنا ، فلا بأس بذلك.
يمكنك فقط نسخ هذه الأسطر الثلاثة من التعليمات البرمجية لأخذ عينات من ذاكرتك.
إذا كنت ترغب في صنع ذكاء اصطناعي باستخدام PyTorch ، فهذا هو ما تريده.
ولكن الخبر السار الآن هو أننا انتهينا من إعادة تشغيل تجربة فئة الذاكرة هذه ، ويمكننا الانتقال
إلى الفصل التالي والأخير ، والذي سيكون نموذج التعلم العميق بالكامل.
لذلك في نموذج التعلم العميق هذا ، سيكون لدينا بالطبع شبكتنا التي ستضيف الخبرة وإعادة
التشغيل ثم كل خوارزمية التعلم العميق.
لذلك ستكون فئة أكبر بكثير.
سنقوم بعمل حوالي عشر وظائف ، ولكن هذا فقط لأننا نقوم بذلك خطوة بخطوة حتى تتمكن
من فهم ما يجري بشكل أفضل.
لذلك لا أطيق الانتظار لتنفيذ نموذج التعلم العميق الخاص بنا.
وحتى ذلك الحين ، استمتع بـ I.