PEMROGRAMAN PERCEPTRON
PEMROGRAMAN PERCEPTRON
DENGAN MATLAB
DENGAN MATLAB
Tugas ini disusun Guna Memenuhi Tugas Mata Kuliah Jaringan Syaraf Tiruan
Tugas ini disusun Guna Memenuhi Tugas Mata Kuliah Jaringan Syaraf Tiruan
Dosen Pengampu:
Dosen Pengampu:
Nurochman
Nurochman
Disusun oleh :
Disusun oleh :
SEP
SEPTIA
TIANI
NI PUT
PUTRI
RI
086
086500
50005
05
PROGRAM STUDI TEKNIK INFORMATIKA
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI SUNAN KALIJAGA
UNIVERSITAS ISLAM NEGERI SUNAN KALIJAGA
YOGYAKARTA
YOGYAKARTA
2011
2011
MEMBANGUN PERCEPTRON
MEMBANGUN PERCEPTRON
Pada MATLAB, fungsi yang dipakai untuk membangun jaringan perceptron adalah
Pada MATLAB, fungsi yang dipakai untuk membangun jaringan perceptron adalah newp
newp. Perintah
. Perintah
newp
newp
akan membuat sebuah perceptron dengan spesifikasi tertentu (jumlah unit input, jumlah
akan membuat sebuah perceptron dengan spesifikasi tertentu (jumlah unit input, jumlah
neuron,fungsi aktivasi, dll)
neuron,fungsi aktivasi, dll)
F
Fu
un
ng
gssii :: net = newp(PR,S)
net = newp(PR,S)
net =
net = newp(PR,S,TF,LF)
newp(PR,S,TF,LF)
PR: matriks berukuran Rx2 yang berisi nilai minimum dan maksimum, dengan Radalah
PR: matriks berukuran Rx2 yang berisi nilai minimum dan maksimum, dengan Radalah
jumlah variabel input (ada R buah m
jumlah variabel input (ada R buah masukan)
asukan)
S
S : jum
: jumla
lah ne
h neur
uron (
on (ta
targ
rget
et))
TF: fungsi aktivasi biner(defaultnya adalah fungsi treshold, dalam MATLAB disebut
TF: fungsi aktivasi biner(defaultnya adalah fungsi treshold, dalam MATLAB disebut
‘‘hardlim
hardlim’)
’)
LF
LF: Fungsi pembelajaran (default : learnp, dipakai untuk mengubah bobot sehingga
: Fungsi pembelajaran (default : learnp, dipakai untuk mengubah bobot sehingga
diperoleh bobot yang mendekati target)
diperoleh bobot yang mendekati target)
Arsitektur jaringan terlihat seperti gambar berikut :
Arsitektur jaringan terlihat seperti gambar berikut :
OPERATOR AND
Jaringan syaraf operasi AND dengan input dan output biner sebagai berikut :
Input
target
0
0
0
0
1
0
1
0
0
1
1
1
Membangun perceptron (newp), dengan 2 input masing-masing mempunyai elemen dengan nilai
minimum 0 dan maksimum 1 ([0 1;0 1]), dan memiliki 1 neuron (1), fungsi aktivasi hardlim
dan fungsi pembelajaran learnp.
Instruksi pada jendela perintah MATLAB :
>> net=newp([0 1;0 1],1);
1. Input jaringan syaraf
% mengetahui ukuran input jaringan syaraf ini >> JumlahInput=net.inputs{1}.size
JumlahInput = 2
Berarti jaringan syaraf ini memiliki 2 variabel input
% mengetahui range elemen input jaringan syaraf ini >> RangeInput=net.inputs{1}.range
RangeInput = 0 1 0 1
Berarti input pertama jaringan syaraf ini memiliki nilai minimum 0 dan nilai maksimum 1, demikian
pula, input kedua memiliki nilai minimum 0 dan maksimum 1.
2. Ukuran output jaringan syaraf
% mengetahui ukuran output jaringan syaraf ini >> JumlahOutput=net.outputs{1}.size
JumlahOutput = 1
Berarti jaringan syaraf ini memiliki 1 variabel output.
3. Lapisan
% mengetahui ukuran lapisan jaringan syaraf ini >> JumlahLapisan=net.layers{1}.size
JumlahLapisan = 1
% mengetahui fungsi aktivasi yang digunakan oleh jaringan syaraf ini >> FungsiAktifasi=net.layers{1}.transferFcn
FungsiAktifasi = hardlim
Berarti jaringan syaraf ini menggunakan fungsi aktivasi hardlim
4. Ukuran Bias
% mengetahui ukuran bias jaringan syaraf ini >> JumlahBias=net.biases{1}.size
JumlahBias = 1
Berarti jaringan syaraf ini menggunakan fungsi aktivasi hardlim
5. Bobot Jaringan Syaraf
% mengetahui jumlah bobot input pada jaringan syaraf ini >> JumlahBobotInput=net.inputWeights{1}.size
JumlahBobotInput = 1 2
Berarti jaringan syaraf ini memiliki 2 bobot input
% mengetahui bobot-bobot input pada jaringan syaraf ini >> BobotInput=net.IW{:}
BobotInput = 0 0
Berarti kedua bobot ini memiliki nilai awal = 0
%mengetahui jumlah lapisan pada jaringan syaraf ini >> JumlahBobotLapisan=net.LW{:}
JumlahBobotLapisan = []
Berarti jaringan syaraf ini tidak memiliki bobot lapisan
% mengetahui bobot-bobot bias pada jaringan ini >> BobotBias=net.b{1}
BobotBias = 0
Menggambar hubungan antara vektor input dengan vektor target pada perceptron menggunakan
perintah plotpv.
Syntax : plotpv(P,T)
Plotpv(P,T,V)
P : matriks berukuran m x n, yang merupakan vektor input dengan jumlah variabel input (m)
maksimum 3, dan n jumlah data.
T : matriks berukuran r x n, yang merupakan vektir target yang harus bernilai 0 atau 1
(biner) dengan jumlah variabel target (r) maksimum 3 , dan n jumlah data.
V : batas grafik, [x_min x_max y_min y_max]
% menggambar hubungan antara vektor input P dan target T
>> P=[0 0 1 1;0 1 0 1]; >> T=[0 0 0 1];
>> plotpv(P,T);
Akan dihasilkan gambar seperti berikut :
>> net=newp([0 1;0 1],1); >> net.IW{1,1}=[-0.8 -1.3]; >> net.b{1}=0.6; >> P=[0 0 1 1;0 1 0 1]; >> T=[0 0 0 1]; >> plotpv(P,T);
% melihat garis hasil komputasi >> plotpc(net.IW{1,1},net.b{1});
% jaringan syaraf yang ada dikembalikan sesuai inisialisasi fungsinya >> net=init(net); >> net.IW{1,1} ans = 0 0 >> net.b{1} ans = 0
Melakukan pembelajaran agar jaringan syaraf bisa beradaptasi, untuk melakukan adaptasi pada
perseptron digunakan adapt.
Syntax : [net,Y,E] = adapt(net,P,T)
Net
: jaringan syaraf yang telah beradaptasi
Y
: output jaringan syaraf
E
: error yang terjadi (target – output jaringan)
P
: input jaringan (data-data yang diadaptasikan)
T
: target jaringan
instruksi untuk melakukan adaptasi sebanyak 3 epoh pada jaringan syaraf untuk operasi AND
% input
>> P=[0 0 1 1;0 1 0 1]; % target
% membangun jaringan syaraf tiruan dengan perceptron >> net=newp(minmax(P),1);
% mengembalikan nilai bobot sesuai dengan inisialisasi fungsi >> net=init(net);
% set epoh sebanyak 3 kali >> net.adaptParam.passes=3; % melakukan adaptasi
>> [net,Y,E]=adapt(net,P,T); % menggambar grafik hasil >> plotpv(P,T);
>> plotpc(net.IW{1,1},net.b{1}); % mencari mean square
>> EmEsE=mse(E); % tampilkan hasil >> BoboInputAkhir=net.IW{1,1} BoboInputAkhir = 1 1 >> BoboBiasAkhir=net.b{1} BoboBiasAkhir = -1 >> MSE=EmEsE MSE = 0.2500
>> %karena masih o.25 maka dilakukan pelatihan lagi >> P = [0 0 1 1;0 1 0 1];
>> T = [0 0 0 1];
>> net = newp(minmax(P),1); >> net = init(net);
>> % nilai epoh diubah menjadi 6 >> net.adaptParam.passes=6; >> [net,Y,E]=adapt(net,P,T); >> plotpv(P,T); >> plotpc(net.IW{1,1},net.b{1}); >> EmEsE=mse(E); >> BoboBiasAkhir=net.b{1} BoboBiasAkhir = -2 >> BoboInputAkhir=net.IW{1,1} BoboInputAkhir = 1 1 >> MSE=EmEsE MSE = 0
Melakukan simulasi input data baru terhadap jaringan syaraf yang telah seles ai melakukan
pembelajaran, menggunakan sim.
Syntax : a = sim(net,p)
a : output hasil simulasi
net : jaringan syaraf yang telah dilatih.
p : input data yang akan disimulasikan pada jaringan syaraf
untuk menghitung keluaran jaringan , kita tidak perlu mengetahui targetnya. Akan tetapi jika ingin
dihitung kesalahan yang terjadi (selisih antara target dengan keluaran jaringan), maka harus diketahui
targetnya.
>> %melakukan pengujian >> a=sim(net,[1;0]) a = 0 >> a = sim(net,[1;1]) a = 1 >> a = sim(net,[0;0]) a = 0 >> a=sim(net,[0;1]) a = 0Mengambil informasi tentang output jaringan, error adaptasi, bobot input, bobot bias, dan mean
square error (MSE) pada setiap epoh, dan menyimpannya dalam file HasilPerceptronAnd.m
>> fb=fopen('HasilPerseptronAnd.m','w'); >> %input >> P=[0 0 1 1;0 1 0 1]; >> [m n]=size(P); >> fprintf(fb,'Data input (P):\n') ans = 16 >> for i=1;n, fprintf(fb,'%d %d\n',P(:,i)); end; n = 4
>> %Target >> T=[0 0 0 1];
>> fprintf(fb,'Target (T):\n'); >> fprintf(fb,'%d\n',T);
>> %bentuk jaringan syaraf dengan perceptron >> net=newp(minmax(P),1);
>> plotpv(P,T);
>> linehandle=plotpc(net.IW{1},net.b{1}); >> %set eror awal E=1
>> E=1;
>> %kembalikan nilai bobot sesiau inisialisasi fungsinya >> net=init(net);
>> fprintf(fb,'Bobot Input Awal(w):%4.2f %4.2f\n',net.IW{1,1}); >> fprintf(fb,'Bobot Bias Awal(b):%4.2f\n',net.b{1});
>> linehandle=plotpc(net.IW{1},net.b{1}); >> Epoh=0;
>> MaxEpoh=100;
>> %pembelajaran kerjakan sampai sum squere eror(SSE)=0 atau epoh>maxEpoh >> while(sse(E)&(Epoh<MaxEpoh)),
fprintf(fb,'\n'); Epoh=Epoh+1;
fprintf(fb,'Epoh ke-%1d \n',Epoh); [net,Y,E]=adapt(net,P,T);
fprintf(fb,'Output Jaringan (Y):'); for i=1:n,
fprintf(fb,'%1d',E(i)); end;
fprintf(fb,'\n');
fprintf(fb,'Eror Adapatasi (E):'); for i=1:n,
fprintf(fb,'%1d',E(i)); end;
fprintf(fb,'\n');
fprintf(fb,'Bobot Input Baru (W):%4.2f %4.2f \n',net.IW{1,1}); fprintf(fb,'Bobot Bias Baru (b) : %4.2f \n',net.b{1});
fprintf(fb,'Sum Square Error (SSE):%4.2f \n',sse(E)); linehandle=plotpc(net.IW{1},net.b{1},linehandle); drawnow; Y E pause(2); end; Y = 1 1 1 1 E = -1 -1 -1 0
Y = 0 0 0 0 E = 0 0 0 1 Y = 0 0 0 0 E = 0 0 0 1 Y = 0 1 1 1 E = 0 -1 -1 0 Y = 0 0 0 0 E = 0 0 0 1 Y = 0 0 0 1 E = 0 0 0 0 >> fprintf(fb,'\n');
>> fprintf(fb,'Bobot Input Akhir (W):%4.2f %4.2f \n',net.IW{1,1}); >> fprintf(fb,'Bobot Bias Akhir (b):%4.2f \n',net.b{1});
>> %vektor yang akan disimulasikan
>> p=[0.5 0.1 0.7 0.2 0.5; 0.5 0.1 0.1 0.4 0.3]; >> %simulasi
a = 0 0 0 0 0 >> plotpv(p,a); >> ThePoint=findobj(gca,'type','line'); >> set(ThePoint,'Color','green'); >> pause(2); >> hold on; >> plotpv(P,T); >> plotpc(net.IW{1},net.b{1}); >> hold off; >> fclose(fb);
HasilperceptronAnd.m
Data input (P):
0 0
0 1
1 0
1 1
Target (T):
0
0
0
1
Bobot Input Awal(w):0.00 0.00
Bobot Bias Awal(b):0.00
Epoh ke-1
Output Jaringan (Y):-1-1-10
Eror Adapatasi (E):-1-1-10
Bobot Input Baru (W):-1.00 -1.00
Bobot Bias Baru (b) : -3.00
Epoh ke-2
Output Jaringan (Y):0001
Eror Adapatasi (E):0001
Bobot Input Baru (W):0.00 0.00
Bobot Bias Baru (b) : -2.00
Sum Square Error (SSE):1.00
Epoh ke-3
Output Jaringan (Y):0001
Eror Adapatasi (E):0001
Bobot Input Baru (W):1.00 1.00
Bobot Bias Baru (b) : -1.00
Sum Square Error (SSE):1.00
Epoh ke-4
Output Jaringan (Y):0-1-10
Eror Adapatasi (E):0-1-10
Bobot Input Baru (W):0.00 0.00
Bobot Bias Baru (b) : -3.00
Sum Square Error (SSE):2.00
Epoh ke-5
Output Jaringan (Y):0001
Eror Adapatasi (E):0001
Bobot Input Baru (W):1.00 1.00
Bobot Bias Baru (b) : -2.00
Sum Square Error (SSE):1.00
Epoh ke-6
Output Jaringan (Y):0000
Eror Adapatasi (E):0000
Bobot Input Baru (W):1.00 1.00
Bobot Bias Baru (b) : -2.00
Sum Square Error (SSE):0.00
Bobot Input Akhir (W):1.00 1.00
Bobot Bias Akhir (b):-2.00
OPERATOR NOT AND
Jaringan syaraf operasi AND dengan input dan output biner sebagai berikut :
Input
target
0
0
0
0
1
0
1
0
1
1
1
0
% mengetahui ukuran input jaringan syaraf ini >> net=newp([0 1;0 1],1);
>> JumlahInput=net.inputs{1}.size JumlahInput =
2
Berarti jaringan syaraf ini memiliki 2 variabel input
% mengetahui range elemen input jaringan syaraf ini >> RangeInput=net.inputs{1}.range
RangeInput = 0 1 0 1
Berarti input pertama jaringan syaraf ini memiliki nilai minimum 0 dan nilai maksimum 1, demikian
pula, input kedua memiliki nilai minimum 0 dan maksimum 1.
% mengetahui ukuran output jaringan syaraf ini >> JumlahOutput=net.outputs{1}.size
JumlahOutput = 1
Berarti jaringan syaraf ini memiliki 1 variabel output.
% mengetahui ukuran lapisan jaringan syaraf ini >> JumlahLapisan=net.layers{1}.size
JumlahLapisan = 1
Berarti jaringan syaraf ini memiliki 1 lapisan ( single layer )
% mengetahui fungsi aktivasi yang digunakan oleh jaringan syaraf ini >> FungsiAktifasi=net.layers{1}.transferFcn
FungsiAktifasi = hardlim
% mengetahui ukuran bias jaringan syaraf ini >> JumlahBias=net.biases{1}.size
JumlahBias = 1
% mengetahui jumlah bobot input pada jaringan syaraf ini >> JumlahBobotInput=net.inputWeights{1}.size
JumlahBobotInput = 1 2
% mengetahui bobot-bobot input pada jaringan syaraf ini >> BobotInput=net.IW{:}
BobotInput = 0 0
%mengetahui jumlah lapisan pada jaringan syaraf ini >> JumlahBobotLapisan=net.LW{:}
JumlahBobotLapisan = []
% mengetahui bobot-bobot bias pada jaringan ini >> BobotBias=net.b{1}
BobotBias = 0
Menggambar hubungan antara vektor input dengan vektor target pada perceptron menggunakan
perintah plotpv.
>> P=[0 0 1 1;0 1 0 1]; >> T=[0 0 1 0];
>> plotpv(P,T);
>> net.IW{1,1}=[-0.8 -1.3]; >> net.b{1}=0.6;
>> P=[0 0 1 1;0 1 0 1]; >> T=[0 0 1 0];
>> plotpv(P,T);
% melihat garis hasil komputasi >> plotpc(net.IW{1,1},net.b{1});
% jaringan syaraf yang ada dikembalikan sesuai inisialisasi fungsinya >> net=init(net); >> net.IW{1,1} ans = 0 0 >> net.b{1} ans = 0
Melakukan pembelajaran agar jaringan syaraf bisa beradaptasi.
% input
>> P=[0 0 1 1;0 1 0 1]; % target
>> T=[0 0 1 0];
% membangun jaringan syaraf tiruan dengan perceptron >> net=newp(minmax(P),1);
% mengembalikan nilai bobot sesuai dengan inisialisasi fungsi >> net=init(net);
% set epoh sebanyak 3 kali >> net.adaptParam.passes=3; % melakukan adaptasi
>> [net,Y,E]=adapt(net,P,T); % menggambar grafik hasil >> plotpv(P,T);
>> plotpc(net.IW{1,1},net.b{1});
% mencari mean square >> EmEsE=mse(E); >> BobotInputAkhir=net.IW{1,1} % tampilkan hasil BobotInputAkhir = 1 -2 >> BobotBiasAkhir=net.b{1} BobotBiasAkhir = -1 >> MSE=EmEsE MSE = 0.2500
>> %pelatihan dengan nilai epoh di ubah menjadi 4 >> P=[0 0 1 1;0 1 0 1];
>> T=[0 0 1 0];
>> net=newp(minmax(P),1); >> net=init(net);
>> % nilai epoh diubah menjadi 4 >> net.adaptParam.passes=4; >> [net,Y,E]=adapt(net,P,T); >> plotpv(P,T); >> plotpc(net.IW{1,1},net.b{1}); >> EmEsE=mse(E); >> BoboInputAkhir=net.IW{1,1} BoboInputAkhir =
1 -2 >> BoboBiasAkhir=net.b{1} BoboBiasAkhir = -1 >> MSE=EmEsE MSE = 0
% simulasi input data baru tertentu terhadap jaringan syaraf yang telah selesai melakukan pembelajaran >> a=sim(net,[1;0]) a = 1 >> a=sim(net,[1;1]) a = 0 >> a=sim(net,[0;0]) a = 0 >> a=sim(net,[0;1]) a = 0
% informasi tentang output jaringan, error adaptasi, bobot input, bobot bias, dan mean square error pada setiap epoh, dan menyimpannya dalam file HasilPerceptron.m >> fb=fopen('HasilPerceptron.m','w'); >> P=[0 0 1 1;0 1 0 1]; >> [m n]=size(P); >> fprintf(fb,'Data input (P):\n') ans = 16 >> for i=1;n, fprintf(fb,'%d %d\n',P(:,i)); end; n = 4 >> %Target
>> T=[0 0 1 0];
>> fprintf(fb,'Target (T):\n'); >> fprintf(fb,'%d\n',T);
>> %bentuk jaringan syaraf dengan perceptron >> net=newp(minmax(P),1);
>> plotpv(P,T);
>> linehandle=plotpc(net.IW{1},net.b{1}); >> %set eror awal E=1
>> E=1;
>> %kembalikan nilai bobot sesiau inisialisasi fungsinya >> net=init(net);
>> fprintf(fb,'Bobot Input Awal(w):%4.2f %4.2f\n',net.IW{1,1}); >> fprintf(fb,'Bobot Bias Awal(b):%4.2f\n',net.b{1});
>> linehandle=plotpc(net.IW{1},net.b{1}); >> Epoh=0;
>> MaxEpoh=100;
>> %pembelajaran kerjakan sampai sum squere eror(SSE)=0 atau epoh>maxEpoh >> while(sse(E)&(Epoh<MaxEpoh)),
fprintf(fb,'\n'); Epoh=Epoh+1;
fprintf(fb,'Epoh ke-%1d \n',Epoh); [net,Y,E]=adapt(net,P,T);
fprintf(fb,'Output Jaringan (Y):'); for i=1:n,
fprintf(fb,'%1d',E(i)); end;
fprintf(fb,'\n');
fprintf(fb,'Eror Adapatasi (E):'); for i=1:n,
fprintf(fb,'%1d',E(i)); end;
fprintf(fb,'\n');
fprintf(fb,'Bobot Input Baru (W):%4.2f %4.2f \n',net.IW{1,1}); fprintf(fb,'Bobot Bias Baru (b) : %4.2f \n',net.b{1});
fprintf(fb,'Sum Square Error (SSE):%4.2f \n',sse(E)); linehandle=plotpc(net.IW{1},net.b{1},linehandle); drawnow; >> Y E pause(2); end;
Y = 1 1 1 1 E = -1 -1 0 -1 Y = 0 0 0 0 E = 0 0 1 0 Y = 0 0 0 0 E = 0 0 1 0 Y = 0 0 1 0 E = 0 0 0 0 >> fprintf(fb,'\n');
>> fprintf(fb,'Bobot Input Akhir (W):%4.2f %4.2f \n',net.IW{1,1}); >> fprintf(fb,'Bobot Bias Akhir (b):%4.2f \n',net.b{1});
>> %vektor yang akan disimulasikan
>> p=[0.5 0.1 0.7 0.2 0.5; 0.5 0.1 0.1 0.4 0.3]; >> %simulasi >> a=sim(net,p) a = 0 0 0 0 0 >> plotpv(p,a); >> ThePoint=findobj(gca,'type','line'); >> set(ThePoint,'Color','green'); >> pause(2); >> hold on; >> plotpv(P,T); >> plotpc(net.IW{1},net.b{1}); >> hold off; >> fclose(fb);
HasilPerceptron.m
Data input (P): 0 0 0 1 1 0 1 1 Target (T): 0 0 1 0Bobot Input Awal(w):0.00 0.00 Bobot Bias Awal(b):0.00
Epoh ke-1
Output Jaringan (Y):-1-10-1 Eror Adapatasi (E):-1-10-1
Bobot Input Baru (W):-1.00 -2.00 Bobot Bias Baru (b) : -3.00
Sum Square Error (SSE):3.00 Epoh ke-2
Output Jaringan (Y):0010 Eror Adapatasi (E):0010
Bobot Input Baru (W):0.00 -2.00 Bobot Bias Baru (b) : -2.00 Sum Square Error (SSE):1.00 Epoh ke-3
Output Jaringan (Y):0010 Eror Adapatasi (E):0010
Bobot Input Baru (W):1.00 -2.00 Bobot Bias Baru (b) : -1.00 Sum Square Error (SSE):1.00 Epoh ke-4
Output Jaringan (Y):0000 Eror Adapatasi (E):0000
Bobot Input Baru (W):1.00 -2.00 Bobot Bias Baru (b) : -1.00 Sum Square Error (SSE):0.00
Bobot Input Akhir (W):1.00 -2.00 Bobot Bias Akhir (b):-1.00