Anda di halaman 1dari 7

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

Anda mungkin juga menyukai