Cara Membuat ANN dengan Multi Target
Cara Membuat ANN dengan Multi Target – Multi Layer Perceptron (MLP) adalah salah satu jenis jaringan saraf tiruan (neural network) yang terdiri dari beberapa lapisan (layer) dari neuron atau perceptron. MLP adalah model yang digunakan untuk tugas-tugas pemrosesan data yang lebih kompleks, seperti klasifikasi, regresi, dan masalah lain yang melibatkan pembelajaran dari data terstruktur.
Cara Membuat ANN dengan Multi Target – MLP dengan multi-target adalah varian dari MLP yang digunakan untuk menangani tugas-tugas yang melibatkan prediksi atau pemodelan terhadap beberapa target atau output sekaligus. Ini berbeda dari kasus umum di mana MLP biasa memiliki satu output atau target. Dalam MLP multi-target, setiap target atau output diwakili oleh satu neuron pada lapisan output, dan setiap neuron ini akan memprediksi salah satu target. Ini berguna dalam beberapa konteks seperti:
- Multi-label Classification: Dalam klasifikasi multi-label, sebuah sampel data dapat terkait dengan beberapa kelas atau label sekaligus. Misalnya, dalam klasifikasi gambar, satu gambar dapat memiliki beberapa objek yang berbeda. Dengan MLP multi-target, setiap neuron di lapisan output akan mewakili satu label, dan setiap neuron ini akan menghasilkan prediksi apakah label tersebut ada atau tidak pada gambar tersebut.
- Multi-output Regression: Dalam regresi multi-output, tujuan adalah memprediksi beberapa nilai output sekaligus. Misalnya, dalam pemodelan cuaca, kita mungkin ingin memprediksi suhu, kelembaban, dan tekanan udara secara bersamaan. Dengan MLP multi-target, setiap neuron di lapisan output akan mewakili satu output yang ingin diprediksi.
- Multi-task Learning: Dalam beberapa kasus, kita dapat memiliki beberapa tugas yang terkait satu sama lain, dan MLP multi-target dapat digunakan untuk memodelkan semua tugas ini secara bersamaan. Ini dapat menghasilkan pembelajaran yang lebih efisien dan peningkatan kinerja dalam beberapa kasus.
Pada dasarnya, MLP multi-target adalah ekstensi dari MLP konvensional di mana setiap lapisan output mewakili satu target atau output yang ingin diprediksi. Proses pelatihan dan evaluasi pada MLP multi-target seringkali melibatkan penggunaan metrik dan fungsi kerugian yang sesuai untuk menilai kualitas prediksi terhadap masing-masing target yang ada.
Pada postingan sebelumnya, telah banyak dibahas yang point 1 Multi-label Classification, nah kita akan bahas Multi-output Regression. Artinya ada banyak kolom di sisi target. Coba kita buat dummy dengan 10 inputs dan 3 targets.
Saya sengaja nggak melakukan normalisasi oleh sebab itu di layer terakhir nggak pakai fungsi aktivasi ReLU (rentang nilai 0 sampai tak hingga) karena target nya dari minus sampai plus, tapi karena rentang nya tidak bukan -1 sampai +1 jadi dibiarkan saja (jadi bukan fungsi tanh ya). Kode lengkap nya ada dibagian paling akhir artikel.
def get_dataset(): X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=3, random_state=2) return X, y X, y = get_dataset() #dibuat tensor X_t = torch.tensor(X).float() y_t = torch.tensor(y).long()
Seperti biasa, saya akan siapkan class Dataset nya buat handle dataset
class DatasetKu(Dataset): def __init__(self,X,y): self.X = X self.y = y def __len__(self): return len(self.X) def __getitem__(self,index): inputs = self.X[index,:] targets = self.y[index,:] return inputs,targets
Jangan lupa untuk membuat model MLP nya
class ModelKu(nn.Module): def __init__(self,ciri_fitur=4,jumlah_kelas=3): super().__init__() self.layer1 = nn.Linear(ciri_fitur,20) self.layer2 = nn.Linear(20,jumlah_kelas) self.act = nn.ReLU() def forward(self,x): x = self.act(self.layer1(x)) x = (self.layer2(x)) return x
Kita panggil dataset dan batch nya
dataset_train = DatasetKu(X_t,y_t) loader_train = DataLoader(dataset_train,batch_size = 128,shuffle= False)
Saya ingin coba init bobot nya dengan yang lain saja
#https://stackoverflow.com/questions/49433936/how-do-i-initialize-weights-in-pytorch def init_weights(m): if isinstance(m, nn.Linear): torch.nn.init.xavier_uniform(m.weight) m.bias.data.fill_(0.01)
Panggil Model dan init bobot nya, oiya jangan lupa loss functio nya pakai MAE ya yaitu L1Loss() di pytorch
criterion = nn.L1Loss() model = ModelKu(ciri_fitur=10,jumlah_kelas=3) optimizer = torch.optim.Adam(model.parameters(),lr=0.01) model.apply(init_weights) #init bobot dengan xavier
lakukan pelatihan
total_loss = 0 for epoch in range(1,10000): for batch in loader_train: inputs,targets = batch optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs,targets) loss.backward() optimizer.step() total_loss = total_loss+loss.item() current_loss = total_loss/epoch if epoch%100==0: print("epoch: "+str(epoch)," loss: "+str(current_loss))
hasilnya loss nya
epoch: 9100 loss: 0.48015232413352193 epoch: 9200 loss: 0.4786118979914033 epoch: 9300 loss: 0.4770548138278787 epoch: 9400 loss: 0.4755479229859849 epoch: 9500 loss: 0.4741126838138229 epoch: 9600 loss: 0.4727151494162778 epoch: 9700 loss: 0.4713213153874751 epoch: 9800 loss: 0.4699527786702526 epoch: 9900 loss: 0.46864188210530716
kita lakukan evaluasinya
#lakukan evaluasi sekali ploting hasilnya model.eval() outputs = model(X_t) from sklearn.metrics import mean_squared_error as mse for i in range(0,3): error = mse(y_t[:,i].detach().numpy(),outputs[:,i].detach().numpy()) print(i,error)
akan terlihat MSE nya per kolom target dibawah 0.5
0 0.1704971529190538 1 0.18118920633701402 2 0.15606258270940526
Biar lebih mantap kita akan ploting target vs prediksi
#lakukan ploting plt.figure() for i in range(0,3): plt.subplot(1,3,i+1) plt.title('target kolom ke : '+str(i)) plt.plot(y_t[:,no].detach().numpy()) plt.plot(outputs[:,i].detach().numpy()) plt.legend(['Aktual','Prediksi']) plt.show()
hasilnya
Kesimpulan
Cara Membuat ANN dengan Multi Target MLP Multi Layer Perceptron dengan Multi Target harus pintar memilih function loss dan fungsi aktivasinya
Kode Lengkap nya
Berikut kode lengkapnya akan tampil jika kalian sudah login /register