Minggu, 25 Desember 2011

Jaringan Saraf Tiruan Menggunakan Neural Network Toolbox™ Matlab

Halo teman-teman… kali ini saya akan mencoba mengenalkan Jaringan Saraf Tiruan (JST) menggunakan Matlab dan Neural Network Tollbox. Mmmmm…. Ada satu syarat yang wajib untuk teman-teman lakukan, yaitu menginstal Matlab dan toolbox-nya. Program dalam tulisan ini dibuat dengan spesifikasi sebagai berikut:

Matlab Version 7.8 (R2009a)
Neural Network Toolbox Version 6.0.2 (R2009a)

Untuk mengecek versi yang terinstal di komputer teman-teman, bisa ketik perintah "ver" di command window pada Matlab

Mungkin sintax dalam program ini akan sedikit berbeda jika teman-teman memakai Matlab versi sebelum 7.6. Anyway, saya berasusmsi kalau teman-teman sudah memiliki pengetahuan dasar mengenai JST. Yuppp…. mari kita lanjutkan topik kita…. ^_^

Kasus :

Bayangkan jika kita mempunyai sekumpulan angka yang kita berikan nama matriks P, sebagai berikut:
P = [1 2 3 4 5 6 7 8 9 10]
Dan kita juga punya matriks lain, sebut matriks T :
T = [6 12 14 21 27 29 36 41 44 51]

Matriks P adalah input untuk JST kita dan T adalah targetnya. Dengan kata lain, kita akan mengajari P agar mencapai hasil seperti T. Paham, bukan? ^_^

Ada berbagai jenis algoritma dalam JST. Nah, untuk kasus ini saya akan menggunakan Backpropagation.

Neural Network Toolbox
Sekarang mari kita bermain-main menggunakan Neural Network Toolbox.

 
1.        Mari kita bangun arsitektur jaringannya.
Syntax:

net = newff(P,T,[S1 S2...S(N-l)],{TF1 TF2...TFNl},BTF,BLF,PF,IPF,OPF,DDF)

Penjelasan:
Mmmm…. Sintaknya panjang amat. Untuk kesempatan kali ini, kita akan mengurangi input dan hanya menggunakan beberapa saja. Parameter input yang lain kita biarkan pada nilai default-nya. Ok..? Nah, kita reduksi menjadi seperti ini :

net = newff(P,T,[S1 S2...S(N-l)])

P dan T masing-masing adalah input dan Target JST kita, sedangkan S1 S2...S(N-l) adalah jumlah neuron dalam layer JST. Asumsi kita membentuk arsitektur sebagai berikut :

 

Kita mempunya 2 layer tersembunyi (hidden layer), dan kita namai HL 1 dan HL2. HL 1 dan 2 masing-masing memiliki jumlah neuron 3 dan 2.

Nah, sampai saat ini, kita dapat memprogram JST kita sebagai berikut:

% input
P = [1 2 3 4 5 6 7 8 9 10];
% target
T = [6 12 14 21 27 29 36 41 44 51];
% bangun JST
JST = newff(P,T,[3 2]);

2.        Kita bisa mensimulasikan JST kita, karena pada saat ini Matlab sudah membangkitkan nilai-nilai bias dan bobot awal pada tiap-tiap konelsi dan neron. 

Sintax:

Y = sim(JST,P);

Hasilnya dapat kita plot dengan perintah berikut:

plot(P,T,'*',P,Y,'o');

    
Target yang ingin kita capai adalah lambang bintang (*), dan hasil simulasi diperlihatkan dengan tanda  lingkaran (o).

       * Jangan khawatir kalau hasilnya akan berbeda, karena Matlab akan membangkinkan bilangan acak.      Dengan kata lain, bobot dan bias yang dihasilkan akan berbeda, sehingga hasil akhirnya akan berbeda pula.

Sampai saat ini kita telah menulis sintak berikut:


% input
P = [1 2 3 4 5 6 7 8 9 10];
% target
T = [6 12 14 21 27 29 36 41 44 51];
% bangun JST
JST = newff(P,T,[3 2]);
% simulasikan JST
Y = sim(JST,P);
%plot hasilnya
plot(P,T,'*',P,Y,'o');

 Well……. Dengan kata lain, JST kita belum pintar… kita harus melatihnya agar pintar.

3.        Sekarang kita akan melatih JST kita agar pintar dan mencapai target yang diinginkan :)
Sintak yang kita gunakan sebagai berikut:

JST.trainParam.epochs = 5;
JST = train(JST,P,T);
       
Maksud sintak ini adalah kita akan melatih JST sebanyak 5 iterasi (epoch) maju-mundur (backpropagation). Kemudian akan muncul jendela nntraintool.

Untuk saat ini, mari kita abaikan dulu jendela ini. Kita lanjut ke langkah berikutnya.

4.        Sekarang kita simulasikan dan plot hasil pelatihan tadi.
Sintak :
Y = sim(JST,P);
plot(P,T,'*',P,Y,'o');

Diperoleh hasil seperti berikut :
 


Wah.. sepertinya JST kita sudah semakin cerdas. Tanda lingkaran sudah mendekati tanda bintang. Namun belum sepenuhnya mencapai target yang diinginkan. Sampai saat ini, sintak yang sudah kita buat adalah sebagai berikut:


% input
P = [1 2 3 4 5 6 7 8 9 10];
% target
T = [6 12 14 21 27 29 36 41 44 51];
% bangun JST
JST = newff(P,T,[3 2]);
% simulasikan JST
Y = sim(JST,P);
%plot hasilnya
plot(P,T,'*',P,Y,'o');
%latih JST sebanyak 5 epoch
JST.trainParam.epochs = 5;
JST = train(JST,P,T);
%simulasikan JST setelah pelatihan
Y = sim(JST,P);
plot(P,T,'*',P,Y,'o');

 
5.        Agar JST kita lebih pintar, kita harus melatihnya lebih banyak lagi. Sekarang kita naikkan epoch menjadi 30 dan selanjutnya kita latih dan simulasikan lagi.

Syntax :
    JST.trainParam.epochs = 30;
    JST = train(JST,P,T);
    Y = sim(JST,P);
    plot(P,T,'*',P,Y,'o');

     Hasil akhir yang diperoleh sebagai berikut:



Sintak lengkapnya sebagai berikut :

   % input
   P = [1 2 3 4 5 6 7 8 9 10];
   % target
   T = [6 12 14 21 27 29 36 41 44 51];
   % bangun JST
   JST = newff(P,T,[3 2]);
   % simulasikan JST
   Y = sim(JST,P);
   %plot hasilnya
   plot(P,T,'*',P,Y,'o');
   %latih JST sebanyak 5 epoch
   JST.trainParam.epochs = 5;
   JST = train(JST,P,T);
   %simulasikan JST setelah pelatihan
   Y = sim(JST,P);
   plot(P,T,'*',P,Y,'o');
   %naikkan epoch
   JST.trainParam.epochs = 30;
   JST = train(JST,P,T);
   Y = sim(JST,P);
   plot(P,T,'*',P,Y,'o');

Apa yang saya tulis adalah pengetahuan yang sangat dasar mengenai JST. Begitu pula dari sisi pemrograman. Untuk menghasilkan performance yang lebih baik, teman-teman dituntut untuk belajar lebih lanjut lagi dengan mengatur berbagai parameter dari JST tersebut, baik melalui pengaturan arsitektur JST, pengaturan bobot dan bias awal, momentum, metode pelatihan dan lain-lain.
       
Selamat belajar ^_^


Salam hangat..
Torino, 25 Desember 2011, 09.44PM


     

8 komentar:

fajarayie mengatakan...

waw.. MATLAB.. udah lupa aku mah kus.. :(

Kusuma Wardana mengatakan...

Udah ga ngaruh Yi... ga bisa gapapa.. ga bakalan dipake lg kan? hehehe

fajarayie mengatakan...

hehe iya benar.. menuh2in memory otak aja yah.. haha

choco's is mooviie mengatakan...


kita juga punya nih jurnal mengenai jaringan syaraf tiruan, silahkan dikunjungi dan dibaca , berikut linknya
http://repository.gunadarma.ac.id/bitstream/123456789/972/1/11106025.pdf
semoga bermanfaat yaa :)

Anonim mengatakan...

mas, mau nanya, itu kan diplot ya hasil ANN nya, kalo nampilin error antara si hasil P dengan T pake syntax nya apa ya?
Terima kasih,

Salam,

kokolate mengatakan...

untuk melihat nilai bobot masing2 layer gmn y?? tanks bgt sblmnya,,,

Unknown mengatakan...

Mau tanya gan,
bedanya JST dengan menggunakan model Hebb dan JST dengan toolbox apa ya?

Trims

faldiah ulfa baharu mengatakan...

mas mau tanya nih, ini jst saya --> net = newff(minmax(data_latih),[2 21],{'logsig','purelin'},'traingdx');

nah hasilnya itu ada 21 kolom 20 ribu baris tapi kok semua baris sama semua nilainya? yg salah dimana yah mas ??