Anda di halaman 1dari 7

LAPORAN PRAKTIKUM MINGGU KE-8

“Menghasilkan Musik dengan GAN”


Maulva Nazir Ahmad
10120627 – 4KA13
Generative Adversarial Networks (GAN) adalah model pembelajaran mesin yang dapat digunakan
untuk menghasilkan konten kreatif, seperti musik. GAN terdiri dari dua model pembelajaran mesin
yang saling bersaing: generator dan diskriminator. Generator bertugas menghasilkan konten baru,
sedangkan diskriminator bertugas membedakan konten asli dari konten yang dihasilkan oleh
generator. Untuk menghasilkan musik dengan GAN, kita perlu memberikan dataset musik kepada
generator. Dataset ini dapat berupa kumpulan lagu, MIDI, atau bahkan hanya sampel suara.
Generator akan menggunakan dataset ini untuk belajar bagaimana menghasilkan musik yang mirip
dengan musik yang ada dalam dataset.

1. Install Mido
Langkah awal yang dilakukan yaitu menginstall mido.

2. Mengimport library
Langkah selanjutnya yaitu mengimport library-library yang dibutuhkan untuk
menghasilkan musik.
3. Mengekstrak Zip
Langkah selanjutnya yaitu mengestrak zip yang sudah terlebih dahulu didownload untuk
membuka file-file musik yang terdapat di Zip tersebut. Pada tahap ini akan dibuat folder
baru untuk menempatkan output ekstrak dari zip tersebut. Berikut adalah kodingan dan
output dari ekstrak zipnya.

4. Scale Data
Langkah selanjutnya yaitu melakukan scale data. Proses ini dilakukan untuk
mempertimbangkan file musik mana yang akan digunakan untuk proses selanjutnya.
Berikut adalah kodingan dari scale data.

5. Menciptakan Training Data


Langkah selanjutnya yaitu menciptakan training data, pada proses ini akan dibuat perintah
yang akan digunakan untuk mentraining data pada langkah selanjutnya. Berikut adalah
kodingan dari proses menciptakan training data.
6. Membangun Model LSTM
Langkah selanjutnya yaitu membangun model LSTM. Model LSTM inilah yang akan
digunakan untuk ditraining supaya dapat menghasilkan musik yang baru. Pada model yang
dibangun ini akan diatur segala hal yang diperlukan. Berikut ini adalah kodingan serta
output dari proses membangun model LSTM.

7. Training Data
Langkah selanjutnya yaitu melakukan training data pada model yang sudah dibangun pada
tahap sebelumnya. Pada langkah ini training data tersebut akan dilakukan sampai batas
maksimal yang kita tentukan. Berikut adalah kodingan dan output dari proses training data
“LTSM_music.mid.”. Berikut ini adalah kodingan serta output dari proses training data.
8. Membuat dan Menyimpan LSTM Music
Langkah terakhir yaitu membuat langsung serta menyimpan LSTM music berdasarkan
hasil dari proses sebelumnya sebagai file yang baru. File LSTM music yang baru ini
dinamakan LSTM_music.mid. Berikut ini adalah kodingan serta output dari proses
membuat serta menyimpan LSTM music.
22/11/23, 23.31 Maulva Nazir Ahmad_10120627_4KA13_Aplikasi GAN - Colaboratory

Maulva Nazir Ahmad

10120627

4KA13

!pip install mido

Collecting mido
Downloading mido-1.3.0-py3-none-any.whl (50 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.3/50.3 kB 990.2 kB/s eta 0:00:00
Requirement already satisfied: packaging~=23.1 in /usr/local/lib/python3.10/dist-packages (from mido) (23.2)
Installing collected packages: mido
Successfully installed mido-1.3.0

pip install mido

Requirement already satisfied: mido in /usr/local/lib/python3.10/dist-packages (1.3.0)


Requirement already satisfied: packaging~=23.1 in /usr/local/lib/python3.10/dist-packages (from mido) (23.2)

import mido
from mido import MidiFile, MidiTrack, Message
from keras.layers import LSTM, Dense, Activation, Dropout, Flatten
from keras.preprocessing import sequence
from keras.models import Sequential
from tensorflow.keras.optimizers import Adam
from sklearn.preprocessing import MinMaxScaler, StandardScaler
import numpy as np

!unzip /content/chillhopdata.zip -d chillhop

unzip: cannot find or open /content/chillhopdata.zip, /content/chillhopdata.zip.zip or /content/chillhopdata.zip.ZIP.

from sklearn.preprocessing import MinMaxScaler


import numpy as np

# Assuming 'notes' is a list of numerical values


notes = [1, 2, 3, 4, 5]

scaler = MinMaxScaler()
notes_scaled = list(scaler.fit_transform(np.array(notes).reshape(-1, 1)))

notes = [[note] for note in notes]

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]

model = Sequential()
model.add(LSTM(256, input_shape=(n_prev, 1), return_sequences=True))
model.add(Dropout(0.6))
model.add(LSTM(128, input_shape=(n_prev, 1), return_sequences=True))
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)

Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #

https://colab.research.google.com/drive/1TZ8OtzgVJ453XDUNIDIYYw9fVlRB0zvX#scrollTo=dpU4kuZftaTy&printMode=true 1/3
22/11/23, 23.31 Maulva Nazir Ahmad_10120627_4KA13_Aplikasi GAN - Colaboratory
=================================================================
lstm (LSTM) (None, 30, 256) 264192

dropout (Dropout) (None, 30, 256) 0

lstm_1 (LSTM) (None, 30, 128) 197120

dropout_1 (Dropout) (None, 30, 128) 0

lstm_2 (LSTM) (None, 64) 49408

dropout_2 (Dropout) (None, 64) 0

dense (Dense) (None, 1) 65

activation (Activation) (None, 1) 0

=================================================================
Total params: 510785 (1.95 MB)
Trainable params: 510785 (1.95 MB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
WARNING:absl:`lr` is deprecated in Keras optimizer, please use `learning_rate` or use the legacy optimizer, e.g.,tf.keras.optimizers

if len(X) > 0 and len(y) > 0:


model.fit(np.array(X), np.array(y), batch_size=16, epochs=10, verbose=1)
else:
print("/content/chillhopdata.zip")

/content/chillhopdata.zip

import numpy as np

# Assuming your model expects a 3D input with shape (samples, time steps, features)
X_test = np.array(X_test)
if X_test.ndim == 2:
# Assuming the time steps (features) need to be added
X_test = np.expand_dims(X_test, axis=0) # Add a dimension for samples

# Now X_test should have the correct shape


if X_test.size > 0:
prediction = model.predict(X_test)

# Assuming your prediction shape is (samples, features)


prediction = np.squeeze(prediction)

# Invert scaling
prediction = np.squeeze(scaler.inverse_transform(prediction.reshape(-1, 1)))

# Convert to integers
prediction = [int(i) for i in prediction]

# Rest of your code for creating MIDI file


mid = MidiFile()
track = MidiTrack()
t = 0
for note in prediction:
note = np.asarray([147, note, 67])
bytes = note.astype(int)
msg = Message.from_bytes(bytes[0:3])
t += 1
msg.time = t
track.append(msg)
mid.tracks.append(track)
mid.save('LSTM_music.mid.mid')
else:
print("/content/chillhopdata.zip.")

output /content/chillhopdata.zip.

https://colab.research.google.com/drive/1TZ8OtzgVJ453XDUNIDIYYw9fVlRB0zvX#scrollTo=dpU4kuZftaTy&printMode=true 2/3
22/11/23, 23.31 Maulva Nazir Ahmad_10120627_4KA13_Aplikasi GAN - Colaboratory

https://colab.research.google.com/drive/1TZ8OtzgVJ453XDUNIDIYYw9fVlRB0zvX#scrollTo=dpU4kuZftaTy&printMode=true 3/3

Anda mungkin juga menyukai