يقوم المشروع ببناء شبكة عصبية متكررة (RNN) لتوليد الموسيقى. تم تدريب النموذج على تعلم الأنماط الموجودة في النوتة الموسيقية الأولية بتدوين ABC، مما يؤدي إلى إنشاء الموسيقى. يتم جمع مجموعة البيانات من kaggle وتحتوي على تدوين ABC للأغاني. الرابط: https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile يتم توجيه النص الموجود في مجموعة البيانات أولاً لإنشاء تمثيل رقمي للحفاظ على جدول البحث. سوف نستخدم بعض الأمثلة على التسلسلات لتدريب RNN بطول تسلسل محدد. سيكون هناك أيضًا تسلسل مستهدف للتنبؤ بالشخصية التالية. سيتم تنفيذ ذلك باستخدام طريقة الدُفعات التي ستحول هذا الدفق من مؤشرات الأحرف إلى تسلسلات بالحجم المطلوب. سيعتمد نموذج RNN الذي نقوم بإنشائه على بنية LSTM ويحتوي على المُهيئ "glorot_uniform" ووظيفة التنشيط "sigmoid"، حيث سنستخدم ناقل الحالة للحفاظ على معلومات حول العلاقات الزمنية بين الأحرف المتتالية. يتم بعد ذلك إدخال الناتج النهائي لـ LSTM في طبقة كثيفة متصلة بالكامل حيث سنقوم بإخراج softmax على كل حرف في المفردات، ثم عينة من هذا التوزيع للتنبؤ بالحرف التالي.
الطبقة 1: طبقة التضمين لتحويل المؤشرات إلى نواقل كثيفة ذات حجم تضمين ثابت
الطبقة 2: LSTM مع عدد الوحدات rnn_units.
الطبقة 3: طبقة كثيفة (متصلة بالكامل) تعمل على تحويل مخرجات LSTM إلى حجم المفردات.
يتم بعد ذلك تدريب نموذج RNN باستخدام نموذج من فقدان الانتروبيا المتقاطعة (خسارة احتمالية السجل السلبي)، أي خسارة متفرقة_فئوية_متقاطعة، حيث أنها تستخدم أهدافًا صحيحة لمهام التصنيف الفئوية. نريد حساب الخسارة باستخدام الأهداف الحقيقية - التسميات - والأهداف المتوقعة - السجلات. يتم تعريف المعلمة الفائقة للإعداد والتحسين. يتم استخدام مُحسِّن Adam كمُحسِّن لعملية التدريب. تم تدريب النموذج على 3000 تكرار، بحجم دفعة 10 وطول تسلسل 100. يتعلم النموذج بشكل أفضل عندما يتم تعيين معدل التعلم على 1e-3. لتوليد الموسيقى، يتبع النموذج إجراء التنبؤ:
الخطوة 1: تهيئة سلسلة البداية "البذرة" وحالة RNN، وتعيين عدد الأحرف التي نريد إنشاؤها.
الخطوة 2: استخدم سلسلة البداية وحالة RNN للحصول على توزيع الاحتمال على الحرف المتوقع التالي.
الخطوة 3: عينة من التوزيع متعدد الحدود لحساب مؤشر الحرف المتوقع. يتم بعد ذلك استخدام هذا الحرف المتوقع كمدخل تالي للنموذج.
الخطوة 4: في كل خطوة زمنية، يتم إدخال حالة RNN المحدثة مرة أخرى في النموذج، بحيث يكون لديها الآن سياق أكبر في عمل التنبؤ التالي. بعد التنبؤ بالحرف التالي، يتم تغذية حالات RNN المحدثة مرة أخرى إلى النموذج، وهذه هي الطريقة التي يتعلم بها تبعيات التسلسل في البيانات، حيث يحصل على مزيد من المعلومات من التنبؤات السابقة.
الآن، يقوم النموذج بإنشاء الأغاني باستخدام "start_string" و"Generation_length" المحدد من قبل المستخدم.