WEBVTT

00:00.150 --> 00:02.550
مرحبًا ومرحبًا بكم في برنامج Python التعليمي هذا.

00:02.580 --> 00:07.010
حسنًا ، لدينا وظيفة أخيرة يجب تنفيذها في فئة ذاكرة إعادة التشغيل.

00:07.020 --> 00:08.460
هذه هي الوظيفة البسيطة.

00:08.460 --> 00:11.970
وذلك بالطبع للحصول على بعض العينات العشوائية من ذاكرتنا.

00:11.970 --> 00:15.570
وبالتالي ، ستعيد هذه الدالة هذه العينات العشوائية.

00:15.900 --> 00:16.290
حسنا.

00:16.290 --> 00:17.670
لذلك دعونا ننفذها.

00:17.670 --> 00:20.370
سوف نسميها عينة.

00:20.400 --> 00:21.240
ها نحن ذا.

00:21.240 --> 00:24.960
وهذه الوظيفة تأخذ حجتين كمدخلات.

00:24.990 --> 00:27.120
الأول ، كالعادة ، النفس.

00:27.300 --> 00:29.970
هدفنا المستقبلي من فئة ذاكرة إعادة التشغيل.

00:29.970 --> 00:33.320
والحجة الثانية هي ، هل يمكنك محاولة التخمين؟

00:33.330 --> 00:39.930
حسنًا ، نحن نأخذ بعض العينات ، بحجم ثابت ، وبالتالي نحتاج إلى اختيار حجم عيناتنا.

00:39.930 --> 00:42.480
وبشكل أكثر دقة ، نسميها حجم الدفعة.

00:42.570 --> 00:47.880
هذا هو الاسم الذي سنطلقه على الوسيطة الثانية ، حجم الدفعة.

00:47.880 --> 00:49.440
وها نحن ذا.

00:49.440 --> 00:53.670
لدينا حجتان ويمكننا الآن تنفيذ دالة العينة.

00:54.310 --> 01:00.450
لذا الآن أريد فقط أن أحذرك ، سيحصل هذا على القليل من التقنية ، لكنني سأبذل قصارى جهدي في التوضيح.

01:01.000 --> 01:05.080
لذلك سنبدأ بإنشاء متغير العينات.

01:05.080 --> 01:08.860
هذا هو المتغير الذي سيحتوي على عينات من الذاكرة.

01:09.430 --> 01:09.790
حسنا.

01:09.790 --> 01:11.170
حتى العينات متساوية.

01:11.170 --> 01:13.870
والآن كيف سنحصل على هذه العينات؟

01:14.200 --> 01:20.410
حسنًا ، أولاً وقبل كل شيء ، علينا أن نأخذ ذاكرتنا لأننا نحصل على هذه العينات من ذاكرتنا.

01:20.740 --> 01:27.580
ثم سنحتاج على الأرجح إلى حجم الدُفعة لأن العينات التي نريد الحصول عليها تحتوي على عناصر حجم الدُفعة.

01:27.580 --> 01:33.310
لذلك نحن بحاجة إلى ذاكرة ، ونحتاج إلى حجم دفعة ، ثم نحتاج إلى بعض حيل PyTorch أو Python للحصول على التنسيق

01:33.310 --> 01:34.930
الجيد لهذه العينات.

01:35.350 --> 01:40.720
إذن ما سأفعله ، سأكتب سطرًا من التعليمات البرمجية ثم سأشرحها عنصرًا

01:40.720 --> 01:41.590
عنصرًا.

01:41.680 --> 01:42.660
لنفعلها اذا.

01:42.670 --> 01:45.760
سأبدأ بأخذ وظيفة مضغوطة.

01:45.970 --> 01:48.250
سأشرح قريبًا ما يفعله.

01:48.310 --> 01:51.810
وداخل وظيفة zip هذه ، سأضيف نجمة.

01:51.820 --> 01:53.620
سأقوم بتوسيع ذلك أيضًا.

01:53.800 --> 01:57.670
عينة النجمة والنقطة العشوائية.

01:58.030 --> 02:03.240
عشوائية جدًا ، كما قد تكون خمنت ، هي المكتبة العشوائية التي قمنا باستيرادها هنا.

02:03.250 --> 02:09.550
هذا هو السبب الرئيسي الذي دفعنا لاستيراد هذه المكتبة العشوائية ، لأننا كنا نأخذ بعض العينات العشوائية.

02:09.760 --> 02:15.250
لذا من هذه المكتبة العشوائية ، سنستخدم دالة العينة.

02:15.250 --> 02:17.860
إذن هذه هي المتغيرات لدينا وهذه دالة.

02:17.860 --> 02:19.900
لذا سأضيف بعض الأقواس.

02:19.900 --> 02:24.520
والآن كما ترى ، فإن العينة هي دالة وعلينا إدخال بعض المتغيرات.

02:25.350 --> 02:27.660
لذا كما ترى ، فإن الحجة الأولى هي الذات.

02:27.660 --> 02:34.710
وفي الواقع ، عند الحديث عن الذات ، هذا يتوافق مع ذاكرة الذات ، وذاكرة مثالنا المستقبلي ، كائن

02:34.710 --> 02:36.910
من فئة ذاكرة إعادة العرض.

02:36.930 --> 02:40.530
لذا سأضيف هنا تلك الذكرى.

02:41.130 --> 02:46.320
ثم الحجة الثانية ، كما قد تكون خمنت ، هي حجم الدفعة التي نريد أن نأخذها

02:46.320 --> 02:51.280
عشوائيًا من ذاكرتنا وأننا أعطيناها اسمًا بحجم الدُفعة.

02:51.300 --> 02:55.650
لذا فإن الحجة الثانية ستكون حجم الدُفعة.

02:55.680 --> 02:56.250
حسنا.

02:56.250 --> 03:00.720
لذلك تمت كتابة سطر الكود وسأشرح الآن ما يفعله.

03:01.260 --> 03:08.400
لذلك أولاً وقبل كل شيء ، باستخدام وظيفة العينة العشوائية هذه ، نأخذ بعض العينات العشوائية من

03:08.550 --> 03:11.670
الذاكرة التي لها حجم ثابت لحجم الدُفعة.

03:12.340 --> 03:13.920
لذلك هذا مفهوم.

03:13.930 --> 03:18.070
ولكن ما الذي تفعله وظيفة zip store هذه؟

03:18.280 --> 03:20.320
حسنًا ، لا يوجد لغز حول هذا الموضوع.

03:20.350 --> 03:22.580
إنها مثل وظيفة إعادة التشكيل.

03:22.600 --> 03:28.030
لذا ، على سبيل المثال ، سأضيف القليل من الشائع هنا فقط لشرح أنني سأزيله.

03:28.210 --> 03:33.490
لنفترض ، على سبيل المثال ، أن لدينا قائمة بالعناصر التالية.

03:33.490 --> 03:42.400
على سبيل المثال ، أول واحد ، اثنان ، ثلاثة ، ثم العنصر الثاني ، أربعة ، خمسة ، ستة.

03:43.000 --> 03:47.770
إذن لدينا قائمة من مجموعتين من ثلاثة عناصر ، واحد ، اثنان ، ثلاثة ، أربعة ، خمسة ، ستة.

03:48.160 --> 03:54.370
حسنًا ، إذا قمت بتطبيق وظيفة zip مع وجود النجمة عليها ، حسنًا ، ماذا ستصبح؟

03:54.490 --> 04:03.100
لذا فإن قائمة النجوم المضغوطة ستكون مساوية لقائمة جديدة ، ولكن بشكل مختلف.

04:03.100 --> 04:11.410
وهذا الشكل المختلف سيكون أربعة ، ثم اثنان ، وثلاثة ، ثم خمسة ، وستة.

04:12.370 --> 04:12.700
حسنا.

04:12.700 --> 04:13.840
هذا ما يفعله بالضبط.

04:13.840 --> 04:16.360
إنها فقط تعيد تشكيل قائمتك.

04:17.050 --> 04:17.280
تمام.

04:17.320 --> 04:23.650
والآن بعد أن فهمت ما تفعله قائمة النجوم المضغوطة هذه ، حسنًا ، الآن دعنا نشرح لماذا يتعين علينا القيام

04:23.650 --> 04:24.040
بذلك.

04:24.370 --> 04:31.000
لذا كما فهمت ، سنضيف الأحداث إلى الذاكرة وستكون الأحداث بالشكل ، الحالة

04:31.000 --> 04:34.450
أولاً ، ثم الفعل ، ثم المكافأة.

04:34.570 --> 04:37.060
لكن بالنسبة للخوارزمية الخاصة بنا ، لا نريد هذا التنسيق.

04:37.060 --> 04:43.480
نريد في الواقع أن تحتوي عيناتنا على التنسيق التالي ، وهو تنسيق يتكون من ثلاث عينات ، وعينة

04:43.480 --> 04:48.370
واحدة للحالة ، وعينة واحدة للإجراءات ، وعينة واحدة للمكافأة.

04:48.520 --> 04:55.360
لذلك ، على سبيل المثال ، لنفترض أن هذه 1 إلى 3 هي الحالة الأولى ، والعمل الأول ، والمكافأة واحد ، ثم صر على

04:55.360 --> 04:57.520
اتخاذ إجراء ومكافأة اثنين.

04:57.550 --> 05:04.720
حسنًا ، ما نريده هو دفعة واحدة لكل دفعة واحدة للحالة الأولى والبقاء اثنتين من الدُفعة لإجراء واحد

05:04.720 --> 05:08.710
واحد في العمل الثاني ودفعة ثالثة للمكافأة الأولى.

05:08.710 --> 05:09.700
وكنا اثنان.

05:10.030 --> 05:15.670
هذا هو التنسيق الذي سيكون متوقعًا بعد ذلك لأننا سنلف هذه الدُفعات في

05:15.670 --> 05:16.990
متغير PyTorch.

05:16.990 --> 05:23.290
وتذكر أن متغير بايثون هو متغير يحتوي على موتر وتدرج.

05:23.290 --> 05:29.470
وذلك لكي نتمكن من الاشتقاق فيما يتعلق بالموتر ، لكي نتمكن من الاشتقاق

05:29.470 --> 05:35.260
بالنسبة للموتر ، نحتاج إلى بنية متغير يحتوي على موتر وتدرج.

05:35.350 --> 05:37.590
مرة أخرى ، هكذا يعمل PyTorch.

05:37.600 --> 05:44.290
للتلخيص ، نقوم بإنشاء دفعة واحدة لكل حالة من الإجراءات والمكافآت ، وبعد ذلك سنضع كل مجموعة من

05:44.290 --> 05:49.870
هذه الدُفعات بشكل منفصل في بعض متغيرات PyTorch ، والتي سيحصل كل منها على تدرج

05:49.870 --> 05:54.220
حتى نتمكن في النهاية من تكون قادرة على التفريق بين كل منهم.

05:54.430 --> 05:54.880
حسنا.

05:54.880 --> 05:57.370
إذن هذا هو الغرض من هذه الوظيفة.

05:57.370 --> 06:00.310
لذلك اسمحوا لي فقط إزالة هذا التعليق.

06:00.310 --> 06:05.950
والآن الشيء الوحيد الذي يتعين علينا القيام به هو إعادة العينات.

06:05.950 --> 06:12.010
لذلك كما أوضحت للتو ، لا يمكننا إرجاع العينات مباشرة لسبب بسيط هو أننا

06:12.010 --> 06:15.280
نريد وضع العينات في متغير PyTorch.

06:15.430 --> 06:22.540
للقيام بذلك لكل عينة ، سنستخدم وظيفة الخريطة وستقوم وظيفة الخريطة

06:22.540 --> 06:29.860
هذه بالتخطيط من العينات للمس المتغيرات التي ستحتوي على موتر وتدرج.

06:29.950 --> 06:33.460
كما ترى ، تأخذ وظيفة الخريطة هذه العديد من الحجج.

06:33.460 --> 06:38.530
الوسيطة الأولى هي دالة ، وستكون هذه الوظيفة هي الوظيفة التي ستحول العينات إلى بعض

06:38.530 --> 06:40.480
المتغيرات التي تم تدريسها.

06:40.510 --> 06:45.280
والحجة الثانية هي ما نريد تطبيق هذه الدالة عليه.

06:45.310 --> 06:48.400
إذن هذه ستكون حجة هذه الوظيفة.

06:48.610 --> 06:50.350
وبالتالي ، ماذا سيكون؟

06:50.350 --> 06:52.570
هذا بالطبع سيكون العينات.

06:52.570 --> 06:58.540
إذن ، الحجة الثانية هنا ستكون العينات ، ولكن بعد ذلك دعنا نحدد الوظيفة التي نريد

06:58.540 --> 07:00.490
تطبيق كل عينة عليها.

07:00.790 --> 07:06.520
لتعريف دالة هنا ، نحتاج أولاً إلى تسمية الدالة التي سنسميها Lambda.

07:06.880 --> 07:14.170
هذا مجرد اسم لإعطاء lambda ، ثم x ، والتي ستكون متغير هذه الدالة.

07:14.170 --> 07:18.310
هذا هو الاسم الذي أعطيه للمتغير ثم القولون.

07:18.310 --> 07:21.010
وهنا نعطي التعبير عن الدالة.

07:21.010 --> 07:24.250
هذا ما نريد أن تعيده دالة lambda.

07:25.180 --> 07:32.110
وبالتالي ، ما سيكون عليه ، حسنًا ، من المفترض أن يكون شيئًا يتحول أو يأخذ عينات إلى

07:32.110 --> 07:33.280
متغير شعلة.

07:33.640 --> 07:39.160
وللقيام بذلك ، ذكرنا ذلك بالفعل في بعض البرامج التعليمية السابقة حيث لدينا الوظيفة المتغيرة

07:39.160 --> 07:39.700
لذلك.

07:39.820 --> 07:46.600
ستجعل الوظيفة المتغيرة هذا التحويل من موتر الشعلة إلى متغير يحتوي على هذا

07:46.600 --> 07:48.490
الموتر والتدرج.

07:48.580 --> 07:55.840
لذا فإن أول شيء سأضيفه هنا هو متغير متغير سأقوم بداخله بتحويل X لأن

07:55.840 --> 08:01.480
X ستكون العينات بمجرد تطبيق لامدا على العينات.

08:02.230 --> 08:03.430
لكن هذا ليس كل شيء.

08:03.460 --> 08:07.180
هناك شيء تقني أخير نحتاج إلى تنفيذه.

08:07.420 --> 08:13.000
إنها حقيقة أنه بالنسبة لكل دفعة موجودة في العينة ، على سبيل المثال ، مجموعة

08:13.000 --> 08:19.660
الإجراءات واحد واثنين وثلاثة والإجراءات الأخرى ، يتعين علينا ربطها فيما يتعلق بالبعد

08:19.660 --> 08:22.720
الأول الذي يتوافق مع الولاية.

08:22.930 --> 08:25.120
ولماذا علينا أن نجعل هذا التسلسل؟

08:25.330 --> 08:27.510
إنه فقط لكل شيء ليكون محاذيًا بشكل جيد.

08:27.520 --> 08:33.940
أي أنه في كل صف تتطابق الحالة والعمل والمكافأة في نفس الوقت.

08:33.970 --> 08:42.180
T حتى نحصل في النهاية على قائمة بالدُفعات المحاذاة جيدًا وكل دفعة عبارة عن متغير pytorch.

08:42.190 --> 08:44.600
فكيف يمكننا أن نجعل هذا التسلسل؟

08:44.620 --> 08:47.950
حسنًا ، نحتاج إلى استخدام وظيفة القط من مكتبة الشعلة.

08:47.950 --> 08:53.800
سنضيف هنا الشعلة التي نضيف إليها تلك القطة التي تنطبق على X.

08:53.950 --> 08:59.170
ولكن بعد ذلك في وظيفة cat هذه ، نحتاج إلى تحديد البعد الذي نريد أن نجعل هذا التسلسل

08:59.170 --> 09:00.340
بالنسبة له.

09:00.670 --> 09:05.110
وكما ذكرت للتو ، هذا هو البعد الأول الذي يحتوي على مؤشر صفري.

09:05.660 --> 09:06.600
وها قد بدأنا.

09:06.620 --> 09:08.600
لدينا وظيفتنا جاهزة.

09:08.630 --> 09:14.300
ستأخذ وظيفة lambda هذه العينات ، وتسلسلها فيما يتعلق بالبعد الأول ، ثم في

09:14.300 --> 09:20.930
النهاية نقوم بتحويل المستشعرات إلى بعض متغيرات الشعلة التي تحتوي على مستشعر وتدرج ،

09:20.930 --> 09:26.810
لذلك لاحقًا عندما نطبق شبكة عشوائية بمعنى أننا سوف تكون قادرة على التفاضل لتحديث

09:26.810 --> 09:28.070
الأوزان.

09:28.520 --> 09:30.170
حسنًا ، هذه الوظيفة جاهزة.

09:30.170 --> 09:38.090
ثم هنا ، بصفتنا الوسيطة الثانية لدالة الخريطة ، نحتاج إلى تحديد ما نريد تطبيق دالة lambda

09:38.090 --> 09:45.680
هذه على جميع العينات التي نذهب إليها ، وسنطبق دالة lambda هذه على جميع العينات حتى نتمكن

09:45.680 --> 09:53.210
في النهاية من الحصول على قائمة بالدُفعات حيث تكون كل دفعة عبارة عن متغير pytorch.

09:53.690 --> 09:54.080
حسنا.

09:54.080 --> 09:58.040
لذلك كان ذلك تقنيًا تمامًا ، ولكن الآن على الأقل كل شيء سيعمل.

09:58.040 --> 10:00.440
حسنًا ، لن نستخدم هذه التقنية بعد ذلك.

10:00.440 --> 10:01.730
نحن نستخدمه هنا فقط.

10:01.730 --> 10:06.320
لذلك إذا كنت لا ترغب في الحصول على فهم عميق للتفاصيل الفنية هنا ، فلا بأس بذلك.

10:06.320 --> 10:10.520
يمكنك فقط نسخ هذه الأسطر الثلاثة من التعليمات البرمجية لأخذ عينات من ذاكرتك.

10:10.520 --> 10:14.390
إذا كنت ترغب في صنع ذكاء اصطناعي باستخدام PyTorch ، فهذا هو ما تريده.

10:14.390 --> 10:21.200
ولكن الخبر السار الآن هو أننا انتهينا من إعادة تشغيل تجربة فئة الذاكرة هذه ، ويمكننا الانتقال

10:21.200 --> 10:26.720
إلى الفصل التالي والأخير ، والذي سيكون نموذج التعلم العميق بالكامل.

10:26.720 --> 10:32.900
لذلك في نموذج التعلم العميق هذا ، سيكون لدينا بالطبع شبكتنا التي ستضيف الخبرة وإعادة

10:32.900 --> 10:36.380
التشغيل ثم كل خوارزمية التعلم العميق.

10:36.380 --> 10:38.990
لذلك ستكون فئة أكبر بكثير.

10:38.990 --> 10:44.150
سنقوم بعمل حوالي عشر وظائف ، ولكن هذا فقط لأننا نقوم بذلك خطوة بخطوة حتى تتمكن

10:44.150 --> 10:45.830
من فهم ما يجري بشكل أفضل.

10:46.310 --> 10:49.100
لذلك لا أطيق الانتظار لتنفيذ نموذج التعلم العميق الخاص بنا.

10:49.100 --> 10:50.930
وحتى ذلك الحين ، استمتع بـ I.
