Cara Membuat ANN dengan Multi Target

By | November 25, 2023
Print Friendly, PDF & Email
499 Views

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:

  1. 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.
  2. 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.
  3. 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.
See also  Mempersiapkan dataset Pascal VOC ke Format YOLO

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

See also  Perbandingan Hasil Segmentasi Otsu vs UNet Deep Learning
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

Existing Users Log In




Enter Captcha Here :

   

 

 

 

Leave a Reply