Proyek ini membangun Recurrent Neural Network (RNN) untuk generasi musik. Model dilatih untuk mempelajari pola lembaran musik mentah dalam notasi ABC, yang menghasilkan musik. Dataset dikumpulkan dari kaggle dan berisi notasi lagu ABC. Tautan: https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile Teks dalam kumpulan data pertama-tama divektorkan untuk membuat representasi numerik guna memelihara tabel pencarian. Kami akan menggunakan beberapa contoh rangkaian untuk melatih RNN dengan panjang rangkaian yang pasti. Akan ada juga urutan target untuk memprediksi karakter selanjutnya. Ini akan diimplementasikan menggunakan metode batch yang akan mengubah aliran indeks karakter ini menjadi urutan ukuran yang diinginkan. Model RNN yang kita buat akan didasarkan pada arsitektur LSTM dan memiliki inisialisasi "glorot_uniform" dan fungsi aktivasi "sigmoid", di mana kita akan menggunakan vektor status untuk menjaga informasi tentang hubungan temporal antara karakter yang berurutan. Keluaran akhir LSTM kemudian dimasukkan ke dalam lapisan Dense yang terhubung sepenuhnya di mana kita akan mengeluarkan softmax pada setiap karakter dalam kosakata, dan kemudian mengambil sampel dari distribusi ini untuk memprediksi karakter berikutnya.
Lapisan 1: Lapisan penyematan untuk mengubah indeks menjadi vektor padat dengan ukuran penyematan tetap
Lapisan 2: LSTM dengan jumlah unit rnn_units.
Lapisan 3: Lapisan padat (terhubung penuh) yang mengubah keluaran LSTM menjadi ukuran kosakata.
Model RNN kemudian dilatih menggunakan bentuk kerugian crossentropy (kerugian kemungkinan log negatif), yaitu kerugian sparse_categorical_crossentropy, karena menggunakan target bilangan bulat untuk tugas klasifikasi kategoris. Kita ingin menghitung kerugian menggunakan target sebenarnya -- label -- dan target prediksi -- logit. Hyperparameter ditentukan untuk pengaturan dan pengoptimalan. Pengoptimal Adam digunakan sebagai pengoptimal untuk operasi pelatihan. Model dilatih untuk 3000 iterasi, dengan ukuran batch 10 dan panjang urutan 100. Model belajar lebih baik ketika kecepatan pembelajaran diatur ke 1e-3. Untuk menghasilkan musik, model mengikuti prosedur prediksi:
Langkah 1: Inisialisasi string awal "seed" dan status RNN, dan atur jumlah karakter yang ingin kita hasilkan.
Langkah2: Gunakan string awal dan status RNN untuk mendapatkan distribusi probabilitas pada karakter prediksi berikutnya.
Langkah3: Sampel dari distribusi multinomial untuk menghitung indeks karakter prediksi. Karakter prediksi ini kemudian digunakan sebagai masukan model berikutnya.
Langkah 4: Pada setiap langkah waktu, status RNN yang diperbarui dimasukkan kembali ke dalam model, sehingga kini memiliki lebih banyak konteks dalam membuat prediksi berikutnya. Setelah memprediksi karakter berikutnya, status RNN yang diperbarui kembali dimasukkan ke dalam model, yang merupakan cara model mempelajari dependensi urutan dalam data, karena mendapat lebih banyak informasi dari prediksi sebelumnya.
Sekarang, model menghasilkan lagu dengan "string_mulai" dan "panjang_generasi" yang ditentukan pengguna.