يؤلف الموسيقى تلقائيًا
بعد أن تعلمت البرمجة تقريبًا ، أردت إنشاء برنامج قادر على تأليف الموسيقى.
لعدة سنوات قمت بمحاولات بدائية لتكوين الموسيقى تلقائيًا لـ
Visions of Chaos . في الأساس ، تم استخدام الصيغ الرياضية البسيطة أو الطفرات الجينية للتتابعات العشوائية من الملاحظات. بعد أن حققت مؤخرًا نجاحًا متواضعًا في دراسة وتطبيق TensorFlow والشبكات العصبية
للبحث عن automata الخلوية ، قررت أن أحاول استخدام الشبكات العصبية لإنشاء موسيقى.
كيف يعمل؟
الملحن يعلم شبكة عصبية مع ذاكرة
طويلة الأجل (LSTM). شبكات LSTM مناسبة تمامًا للتنبؤ بما يأتي بعد ذلك في تسلسل البيانات. قراءة المزيد عن LSTM
هنا .
تتلقى شبكة LSTM تسلسلات مختلفة من الملاحظات (في هذه الحالة ، هذه هي ملفات midi أحادية القناة). بعد التدريب الكافي ، تتاح لها الفرصة لإنشاء موسيقى مماثلة للمواد التعليمية.
قد تبدو LSTM الداخلية مخيفة ، لكن استخدام
TensorFlow و / أو
Keras يبسط بشكل كبير إنشاء LSTM وتجريبه.
موسيقى المصدر للتدريب النموذجي
بالنسبة إلى شبكات LSTM البسيطة ، يكفي أن تكون التراكيب المصدر قناة ميدي واحدة. كبيرة لهذا هي ملفات ميدي منفردا إلى البيانو. لقد وجدت ملفات midi مع البيانو المعزوفات المنفردة على
صفحة البيانو الكلاسيكية Midi و
mfiles ، واستخدمتها لتدريب
نماذجي .
أضع موسيقى الملحنين المختلفين في مجلدات منفصلة. بفضل هذا ، يمكن للمستخدم تحديد Bach ، انقر فوق الزر "إنشاء" والحصول على أغنية (نأمل) أن تكون مثل Bach.
نموذج LSTM
حدد النموذج الذي قمت على أساسه الرمز
هذا المثال للمؤلف
Sigurður Skúli Sigurgeirsson ، الذي يكتب عنه بمزيد من التفاصيل
هنا .
قمت بتشغيل البرنامج النصي lstm.py وبعد 15 ساعة أكملت التدريب. عندما كنت أقوم بتوقّع التنبؤ. py لإنشاء ملفات midi ، شعرت بخيبة أمل لأنها كانت تتكون من ملاحظة متكررة واحدة. تكرار التدريب مرتين ، حصلت على نفس النتائج.
نموذج المصدر
model = Sequential() model.add(CuDNNLSTM(512,input_shape=(network_input.shape[1], network_input.shape[2]),return_sequences=True)) model.add(Dropout(0.3)) model.add(CuDNNLSTM(512, return_sequences=True)) model.add(Dropout(0.3)) model.add(CuDNNLSTM(512)) model.add(Dense(256)) model.add(Dropout(0.3)) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=["accuracy"])
بعد إضافة إخراج الرسم البياني إلى البرنامج النصي ، رأيت لماذا لم يعمل نموذجي. لم دقة لا تنمو مع مرور الوقت ، كما ينبغي. انظر أدناه في المنشور للحصول على الرسوم البيانية الجيدة التي تظهر كيف ينبغي أن يبدو نموذج العمل.
لم يكن لدي أي فكرة لماذا حدث ذلك. ولكن التخلي عن هذا النموذج وبدأ في ضبط الإعدادات.
model = Sequential() model.add(CuDNNLSTM(512, input_shape=(network_input.shape[1], network_input.shape[2]), return_sequences=True)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(CuDNNLSTM(256)) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(128, activation="relu")) model.add(Dropout(0.2)) model.add(BatchNormalization()) model.add(Dense(n_vocab)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=["accuracy"])
إنه أكثر إحكاما ولديه طبقات LSTM أقل. أضفت أيضا BatchNormalization ، رؤيته في
الفيديو sentdex . على الأرجح ، هناك نماذج أفضل ، لكن هذا النموذج نجح جيدًا في جميع دوراتي التدريبية.
لاحظ أنه في كلا النموذجين قمت باستبدال LSTM بـ CuDNNLSTM. لذا فقد حصلت على تدريب أسرع بكثير في LSTM بفضل استخدام Cuda. إذا لم يكن لديك
GPU مع دعم Cuda ، فعليك استخدام LSTM. شكرا ل
sendtex لهذه النصيحة. تعلم نماذج جديدة وتكوين ملفات midi باستخدام CuDNNLSTM أسرع بنحو خمس مرات.
كم من الوقت يجب تدريب النموذج
يعتمد تشابه النتائج مع الموسيقى الأصلية على مدة التدريب النموذجي (عدد العصور). إذا كان هناك عدد قليل جدًا من العصور ، فستكون للنتيجة الناتجة الكثير من الملاحظات المتكررة. إذا كان هناك الكثير من العصور ، فسيتم إعادة تدريب النموذج وببساطة نسخ الموسيقى الأصلية.
ولكن كيف يمكنك أن تعرف كم من العصور لوقف؟
يتمثل الحل البسيط في إضافة رد اتصال يقوم بتخزين النموذج ودقة / خسارة الرسم البياني كل 50 عصور في دورة تدريبية في 500 عصر. بفضل هذا ، بعد الانتهاء من التدريب ، ستحصل على نماذج ورسوم بيانية بزيادة قدرها 50 عصور ، توضح كيفية سير التدريب.
فيما يلي نتائج الرسوم البيانية لتشغيل واحد مع توفير كل 50 عصر ، مدمجة في صورة GIF متحركة واحدة.
هذه هي الرسوم البيانية التي نريد أن نرى. يجب أن تسقط الخسائر وتبقى منخفضة. يجب زيادة الدقة وتبقى قريبة من 100 ٪.
من الضروري استخدام نموذج مع عدد من الحقائب المقابلة للحظة التي وصلت فيها الرسوم البيانية لأول مرة إلى حدودها. بالنسبة للرسم البياني الموضح أعلاه ، سيكون 150 عصرًا. إذا كنت تستخدم الموديلات القديمة ، فسيتم إعادة تدريبها وعلى الأرجح ستؤدي إلى نسخ بسيطة للمواد المصدر.
تم تدريب النموذج المقابل لهذه الأعمدة على ملفات midi من فئة الأناشيد المأخوذة
من هنا .

إخراج البيانات ميدي في نموذج مع 150 عصور.

ميدي الإخراج في نموذج 100 عصر.
حتى النموذج الذي يحتوي على 100 عصر يمكنه نسخ المصدر بدقة شديدة. قد يكون هذا بسبب عينة صغيرة نسبيا من ملفات midi للتدريب. مع مزيد من الملاحظات ، والتعلم هو أفضل.
عندما يسير التعلم
توضح الصورة أعلاه مثالًا لما يمكن أن يحدث وما يحدث أثناء التدريب. يتم تقليل الخسائر ، وزيادة الدقة ، كالمعتاد ، ولكن فجأة تبدأ بالجنون. في هذه المرحلة ، قد يكون من المفيد أيضًا التوقف. لن يتعلم النموذج مرة أخرى (على الأقل في تجربتي) بشكل صحيح. في هذه الحالة ، لا يزال النموذج المحفوظ الذي يحتوي على 100 عصور عشوائيًا للغاية ، ومع 150 عصرًا انتهت لحظة فشل النموذج بالفعل. الآن ، يتم حفظي في كل 25 عصرًا للعثور على اللحظة المثالية للنموذج تمامًا مع أفضل تدريب ، حتى قبل إعادة تدريبها وتعطلها.
مثال آخر على خطأ التعلم. تم تدريب هذا النموذج على ملفات midi مأخوذة
من هنا . في هذه الحالة ، حافظت على صحتها لفترة أطول بقليل من 200 عصر. عند استخدام نموذج يحتوي على 200 عصر ، يتم الحصول على النتيجة التالية في Midi.

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

نموذج مع 75 عصور ، تم إنشاؤه على أساس تكوينات
شوبان .

نموذج من خمسين عصرًا يستند إلى
ملفات Midi لتركيبات عيد الميلاد .

نموذج 100 عصر يعتمد على
ملفات Midi لتركيبات عيد الميلاد . ولكن هل هم حقا "عيد الميلاد"؟

نموذج 300 عصر يعتمد على ملفات Bach Midi مأخوذة
من هنا ومن
هنا .

نموذج 200 عصر يعتمد على ملف Midi الوحيد بالاكيرف الذي تم التقاطه
هنا .

نموذج مع 200 عصور ، استنادا إلى التراكيب
ديبوسي .

نموذج من عصر 175 يستند إلى مؤلفات موزارت.

نموذج مع 100 عصور على أساس مؤلفات
شوبرت .

نموذج من 200 عصر قائم على مؤلفات
شومان .

نموذج من 200 عصر قائم على مؤلفات
تشايكوفسكي .

نموذج مع 175 عصور على أساس الأغاني الشعبية.

نموذج مع 100 عصور على أساس التهويدات.

نموذج من 100 عصر يعتمد على موسيقى الزفاف.

نموذج 200 عصر يعتمد على ملفات ميدي الخاصة بي المأخوذة من
مقاطع الفيديو الخاصة بي على
YouTube . قد يتم إعادة تدريبه بعض الشيء لأنه يقوم بشكل أساسي بإنشاء نسخ من ملفات midi القصيرة ذات السكتين الواحدة والثانية.
عشرات
بمجرد
الحصول على ملفات midi
الخاصة بك ، يمكنك استخدام أدوات عبر الإنترنت مثل
SolMiRe لتحويلها إلى نتائج. في ما يلي نتيجة ملف midi Softology 200-epoch الوارد أعلاه.
أين يمكنني اختبار الملحن
يتم تضمين LSTM الملحن الآن في
رؤى الفوضى .
حدد نمطًا من القائمة المنسدلة وانقر فوق "إنشاء". إذا قمت بتثبيت الحد الأدنى الضروري من Python و TensorFlow (انظر التعليمات
هنا ) ، فستتلقى في غضون ثوانٍ قليلة (إذا كان لديك وحدة معالجة الرسومات السريعة) ملفًا جديدًا يتكون من آلة ، ويمكنك الاستماع إليه واستخدامه لأي غرض آخر. لا حقوق الطبع والنشر ، لا حقوق الملكية. إذا لم تعجبك النتائج ، فيمكنك النقر فوق "إنشاء" مرة أخرى وبعد بضع ثوانٍ ، ستكون التركيبة الجديدة جاهزة.
لا يمكن اعتبار النتائج بعد مقطوعات كاملة ، ولكن لديها تسلسلات صغيرة ومثيرة للاهتمام من الملاحظات التي سأستخدمها لإنشاء موسيقى في المستقبل. في هذا الصدد ، يمكن أن يكون ملحن LSTM مصدرًا جيدًا للإلهام للمكونات الجديدة.
مصدر بايثون
يوجد أدناه رمز البرنامج النصي Python الذي استخدمته للتدريب والتنبؤ في LSTM. لكي تعمل هذه البرامج النصية ، ليس من الضروري تثبيت Visions of Chaos ، وسيعمل تعلم وتوليد midi من سطر الأوامر.
هنا هو السيناريو التدريب
lstm_music_train.py
وفي ما
lstm_music_predict.py
النص البرمجي للجيل
lstm_music_predict.py
:
أحجام الملفات النموذجية
عيب تضمين الشبكات العصبية في رؤى الفوضى هو حجم الملفات. إذا كان توليد النموذج أسرع ، فسأضيف زرًا حتى يتسنى للمستخدم النهائي تدريب النماذج بنفسه. ولكن نظرًا لأن بعض الدورات التدريبية للعديد من النماذج قد تستغرق عدة أيام ، فإن هذا ليس عمليًا بشكل خاص. بدا لي أنه من الأفضل القيام بكل التدريب واختبار نفسك ، وإضافة فقط أفضل النماذج العاملة. هذا يعني أيضًا أن المستخدم النهائي يحتاج فقط إلى الضغط على زر ، وأن النماذج المدربة ستنشئ مقطوعات موسيقية.
يبلغ حجم كل طراز 22 ميجابايت. في ظل ظروف الإنترنت الحديثة ، ليس هذا كثيرًا ، ولكن على مدار سنوات التطوير ، ازداد حجم رؤى Chaos تدريجياً ، ومؤخراً زادت بشكل مفاجئ من 70 إلى 91 ميغابايت (بسبب نموذج البحث عن الأوتوماتة الخلوية). لذلك ، أضفت حتى الآن نموذجًا واحدًا فقط إلى أداة تثبيت Visions of Chaos. بالنسبة للمستخدمين الذين يريدون المزيد ، فقد نشرت رابطًا لطرازات 1 غيغابايت أخرى. يمكنهم أيضًا استخدام البرنامج النصي أعلاه لإنشاء نماذج خاصة بهم استنادًا إلى ملفات midi الخاصة بهم.
ما التالي؟
في هذه المرحلة ، يعد ملحن LSTM أبسط مثال على استخدام الشبكات العصبية لإنشاء الموسيقى.
لقد وجدت بالفعل ملحنين موسيقيين آخرين على شبكات عصبية سوف أجربها في المستقبل ، لذلك يمكنك أن تتوقع أن في Visions of Chaos ستكون هناك إمكانيات جديدة لتأليف الموسيقى تلقائيًا.