Laporan 8 - Hafidzurrohman Saifullah (10120486) - 4ka04 - Laporan Praktikum Robotika Cerdas M8
Laporan 8 - Hafidzurrohman Saifullah (10120486) - 4ka04 - Laporan Praktikum Robotika Cerdas M8
Tujuan Proyek
Proyek ini bertujuan untuk menggunakan jaringan Long Short-Term Memory (LSTM),
sebuah jenis jaringan saraf rekuren, untuk menghasilkan musik. Ini melibatkan
pemrosesan dan pembelajaran dari data file MIDI untuk menciptakan urutan musik baru.
Pelatihan
Model LSTM dilatih pada dataset yang telah dipersiapkan selama 10 epoch dengan
ukuran batch 16.
```
import mido
import numpy as np
```
- `!pip install mido`: Memasang pustaka `mido` di Python, digunakan untuk bekerja
dengan file MIDI.
- `from mido import MidiFile, MidiTrack, Message`: Mengimpor kelas tertentu dari
`mido` untuk mengelola file dan pesan MIDI.
- `import numpy as np`: Mengimpor NumPy, paket fundamental untuk komputasi ilmiah
dalam Python.
```
import os
notes = []
data = msg.bytes()
notes.append(data[1])
```
- `import os`: Mengimpor modul `os` untuk berinteraksi dengan sistem operasi.
- `if not msg.is_meta and msg.channel == 0 and msg.type == 'note_on'`: Memfilter pesan
untuk hanya menyertakan pesan 'note_on' pada saluran 0.
Menskalakan Data
```
scaler = MinMaxScaler()
```
```
X = []
y = []
n_prev = 30
for i in range(len(notes) - n_prev):
X.append(notes[i:i+n_prev])
y.append(notes[i+n_prev])
X_test = X[-300:]
X = X[:-300]
y = y[:-300]
```
- `notes = [list(note) for note in notes]`: Mengubah setiap nota yang telah diskalakan
menjadi daftar (jika belum).
- `X = []`, `
y = []`: Menginisialisasi daftar kosong untuk fitur input (`X`) dan nilai target (`y`).
- `n_prev = 30`: Menetapkan jumlah nota sebelumnya yang akan dipertimbangkan untuk
memprediksi nota berikutnya.
- Perulangan `for` membuat urutan nota (`X`) dan nota berikutnya yang sesuai (`y`).
```
model = Sequential()
model.add(Dropout(0.6))
model.add(Dropout(0.6))
model.add(LSTM(64, input_shape=(n_prev, 1), return_sequences=False))
model.add(Dropout(0.6))
model.add(Dense(1))
model.add(Activation('linear'))
model.summary()
optimizer = Adam(lr=0.001)
model.compile(loss='mse', optimizer=optimizer)
```
Melatih Model
```
```
- `model.fit(...)`: Melatih model pada data yang telah dipersiapkan (`X` dan `y`)
menggunakan ukuran batch 16 untuk 10 epoch.
Menghasilkan dan Menyimpan Musik
Bagian kode ini melibatkan penggunaan model yang telah dilatih untuk menghasilkan
urutan musik baru dan kemudian menyimpan urutan ini sebagai file MIDI. Sayangnya,
kode pasti untuk bagian ini tidak ditampilkan dalam ikhtisar awal, sehingga saya tidak
dapat memberikan penjelasan baris-per-baris untuk itu.
Setiap bagian kode ini memainkan peran penting dalam mencapai tujuan buku catatan
"LSTM-Music" Anda, yaitu menghasilkan musik menggunakan jaringan LSTM. Proses
ini melibatkan persiapan data, pembangunan dan pelatihan model, dan akhirnya, generasi
musik.