154
LAMPIRAN A SOURCE CODE PROGRAM
%Program inisialisasi bobot awal %Tujuan untuk mendapatkan bobot awal pelatihan %----------------------------------------------clear all; clc; %inisialisasi masukan dan target load data;
%inisialisasi jaringan M=input ('Jumlah_Neuron_Tersembunyi = ' ); [n,N]=size(Ptrain); [m,N]=size(Ttrain);
%inisialisasi bobot awal Ngywid=input('Nguyen widrow / acak?(1 / 0)' ); if Ngywid==0 %inisialisasi acak disp('inisialisasi acak'); W1=0.1*randn(M,n+1); W2=0.1*randn(m,M+1); else %inisialisasi Nguyen-widrow disp('inisialisasi Nguyen-widrow'); gamma=0.7*m^(1/M); W1=-0.5+rand(M,n+1); W2=-0.5+rand(m,M+1); W1=gamma*W1/sqrt(sum(sum(W1.^2))); W2=gamma*W2/sqrt(sum(sum(W2.^2))); end %simpan bobot awal save bobotku W1 W2;
Universitas Sumatera Utara
155
function y = bp2val(P,W1,W2); %-------------------------------------------------------% BP2VAL - Fungsi untuk menghitung nilai keluaran aktual dari jaringan saraf propagasi balik dengan satu lapisan tersembunyi % y = bp2val(P,W1,W2) % P - matriks berukuran n x N, berisi N buah vektor data masukan berdimensi n % W1 - Bobot-bobot dari lapisan masukan ke lapisan tersembunyi % W2 - Bobot-bobot dari lapisan tersembunyi ke lapisan keluaran % y - matriks berukuran m x N, berisi N buah vektor data keluaran berdimensi m %-------------------------------------------------------[n,N] = size(P); [m,M] = size(W2); y = zeros(m,N); for i=1:N v1 = W1 * [P(:,i)' 1]'; xout1 = logsig(v1); v2 = W2 * [xout1' 1]'; xout2 = logsig(v2); y(:,i) = xout2; end %Program utama pelatihan dengan menggunakan momentum %Tujuan untuk mengamati tingkat konvergensi jaringan %-------------------------------------------------------clear all; clc; %inisialisasi masukan dan target load data; %inisialisasi pelatihan M=input('jumlah_neuron_lapisan_tersembunyi = '); Tp=input('[alpha betha] = ' ); %inisialisasi bobot awal load bobotku; %pelatihan 2 faktor [W1,W2,E]=bp2m(Ptrain,Ttrain,M,Tp,W1,W2);
Universitas Sumatera Utara
156
function [W1,W2,E] = bp2m(Ptrain,Ttrain,M,Tp,W1,W2); %-------------------------------------------------------% [W1,W2,E] = bp2m(Ptrain,Ttrain,M,Tp,W1,W2] %Ptrain = matriks berukuran n x N, berisi N buah vektor data masukan berdimensi n %Ttrain = matriks berukuran m x N, berisi N buah vektor data target keluaran berdimensi m %M = Banyaknya neuron pada lapisan tersembunyi %Tp = Parameter pelatihan %Tp(1) = alpha ( laju pembelajaran ) %Tp(2) = betha ( momentum ) %W1 = Bobot dari lapisan masukan ke lapisan tersembunyi( termasuk bias ) %W2 = Bobot dari lapisan tersembunyi ke lapisan keluaran ( termasuk bias ) %E = informasi kesalahan pelatihan (SSE) %-------------------------------------------------------[n,N]=size(Ptrain); [m,N]=size(Ttrain); %inisialisasi alpha = Tp(1); beta = Tp(2); Accuracy =0.01; E=[]; SSE = Accuracy+1; iter = 0; dWnew1 = zeros(size(W1)); dWnew2 = zeros(size(W2)); %Pelatihan jaringan while SSE>Accuracy iter=iter+1 for i=1:N dWold1=dWnew1; dWold2=dWnew2; v1=W1*[Ptrain(:,i)' 1]'; xout1=logsig(v1); g1=diag(xout1) * (ones(size(xout1))-xout1); v2=W2 * [xout1' 1]'; xout2= logsig(v2); g2=diag(xout2) * (ones(size(xout2))-xout2); D2=diag(g2)*(Ttrain(:,i)-xout2); D1=diag(g1)*W2(1:m,1:M)'*D2; dWnew2=D2*[xout1' 1]; dWnew1=D1*[Ptrain(:,i)' 1]; W1=W1+alpha*(dWnew1+beta*dWold1); W2=W2+alpha*(dWnew2+beta*dWold2); end
Universitas Sumatera Utara
157
y=bp2val(Ptrain,W1,W2); SSE=sum(sum(((Ttrain - y).^2)/2)); E=[E;SSE]; end W1b=W1; W2b=W2; %simpan bobotbaru save bobotbaru2 W1b W2b; %Gambar grafik a=[1:iter] b=E(a,:); plot(a,b); title('Grafik Pelatihan Jaringan Backpropagation'); xlabel('Epoch'); ylabel('SSE'); %Program utama pengujian memorisasi jaringan %Tujuan untuk mengamati kemampuan memorisasi jaringan %Masukan berasal dari data pelatihan %Target berasal dari data pelatihan %Bobot berasal dari hasil pelatihan %-----------------------------------------------------clear all; clc; load data; load bobotbaru2; [n,N]=size(Ptrain); y=bp2val(Ptrain,W1b,W2b); Y=round(y); dikenali=0; for i=1:N A=Y(:,i); B=Ttrain(:,i); C=isequal(A,B); if C==1 disp('DIKENALI'); dikenali=dikenali+1; else disp('TIDAK_DIKENALI'); end
Universitas Sumatera Utara
158
end jumlah_dikenali=dikenali; persentase=(jumlah_dikenali/N)*100; disp(['Banyak data ->' num2str(N)]); disp(['dikenali ->' num2str(jumlah_dikenali)]); disp(['Persentase_Memorisasi -> ' num2str(persentase) '%']);
%Program utama pengujian generalisasi %Tujuan untuk mengamati kemampuan generalisasi jaringan %Masukan berasal dari data ujian %Target berasal dari data ujian %Bobot berasal dari hasil pelatihan dengan momentum %-----------------------------------------------------clear all; clc; load data_uji; load bobotbaru2; [n,N]=size(P_uji); y=bp2val(P_uji,W1b,W2b); Y=round(y); dikenali=0; for i=1:N A=Y(:,i); B=T_uji(:,i); C=isequal(A,B); if C==1 disp('DIKENALI'); dikenali=dikenali+1; else disp('TIDAK DIKENALI'); end end jumlah_dikenali=dikenali; persentase=(jumlah_dikenali/N)*100; disp(['Banyak data ->' num2str(N)]); disp(['dikenali ->' num2str(jumlah_dikenali)]); disp(['Persentase_generalisasi -> ' num2str(persentase)'%']);
Universitas Sumatera Utara
159
LAMPIRAN B HASIL SCANNER HURUF
Universitas Sumatera Utara
160
Universitas Sumatera Utara