pemrograman matlab untuk jaringan syaraf tiruan
TRANSCRIPT
PEMROGRAMAN MATLAB
UNTUK JARINGAN SYARAF TIRUAN
A. Jaringan Hebb
Langkah-langkah dalam pembuatan Jaringan Hebb pada Matlab dapat ditunjukkan sebagai
berikut :
1. Memberikan Input pada Jaringan :
Jaringan menerima input dan target berupa matriks, input dan target dapat berbentuk
biner maupun bipolar. Pada Matlab, perintah memberikan input, target, bobot awal dan
bias awal dapat dilakukan dengan perintah :
x = [1 -1 1 -1 ; 1 1 -1 -1]; %input
t = [1 -1 -1 -1]; %target
w = [0 0]; %bobot
b = 0; %bias
2. Melakukan perhitungan bobot dan bias :
Pada proses pelatihan jaringan Hebb, input akan diproses sehingga dapat menghasilkan
output yang akan sama dengan target. Perubahan bobot dan bias pada jaringan Hebb
dapat dilakukan dengan perintah :
w(j) = w(j) + t(i) * x(j,i); %proses perubahan bobot
b = b + t(i); %proses perubahan bias
3. Program Jaringan Hebb dengan M-File / Script :
Lakukan uji coba program jaringan Hebb berikut ini yang dapat diketikkan pada M-
File/Script :
function Hebb
clc
x = [1 -1 1 -1 ; 1 1 -1 -1]; %input
t = [1 -1 -1 -1]; %target fungsi logika AND
w = [0 0]; %bobot
b = 0; %bias
for i = 1 : 4
for j = 1 : 2
w(j) = w(j) + t(i) * x(j,i); %proses perubahan
bobot
end
b = b + t(i);
end
disp('Bobot Baru :');
disp(w);
disp('Bias Baru : ');
disp(b);
plot(x(1,1), x(2,1), 'or',
'MarkerSize',20,'MarkerFaceColor', [0 0 1]);hold on;
plot(x(1,2), x(2,2), 'or',
'MarkerSize',20,'MarkerFaceColor', [1 0 0]);hold on;
plot(x(1,3), x(2,3), 'or',
'MarkerSize',20,'MarkerFaceColor', [1 0 0]);hold on;
plot(x(1,4), x(2,4), 'or',
'MarkerSize',20,'MarkerFaceColor', [1 0 0]);hold on;
m = -(w(1)/ w(2));
c = -b/w(2);
x1 = linspace(-2,2,100); x2 = m*x1 + c;
plot(x2, x1, 'r');
axis([-2 2 -2 2]);
Hasil tampilan untuk bobot dan bias baru adalah sebagai berikut :
Visualisasi hasil pelatihan dengan grafik adalah sebagai berikut :
B. Jaringan Perceptron
Langkah-langkah dalam pembuatan Jaringan Perceptron pada Matlab dapat ditunjukkan
sebagai berikut :
1. Membentuk Jaringan Perceptron
Jaringan Perceptron baru, dapat dibentuk dari perintah :
net = newp([0 1 ; 0 1], 1)
2. Melakukan Pengaturan Bobot dan bias
Dalam pelatihan jaringan perceptron, pengaturan bobot dan bias dapat dilakukan dengan
perintah :
net.IW{1, 1} = bobot;
net.b{1} = bias;
3. Menghitung F(net) / Output Jaringan
Pada akhir pelatihan, terdapat f(net) yang dapat menentukan output dari pelatihan, f(net)
dapat dilakukan dengan perintah :
a = sim(net, p);
4. Program Jaringan Perceptron dengan M-File/Script :
Lakukan uji coba membangun jaringan perceptron dengan mengetikkan perintah berikut
pada M-File/Script Matlab :
function perceptron
p1 = [1 ; 1]; %input
p2 = [1 ; 0];
p3 = [0 ; 1];
p4 = [0 ; 0];
t1 = 1; %target
t2 = 0;
t3 = 0;
t4 = 0;
p = [p1 p2 p3 p4];
t = [t1 t2 t3 t4];
net = newp([0 1 ; 0 1], 1); %pembentukan jaringan
perceptron
bobot = [-1 1];
net.IW{1, 1} = bobot;
bias = [1];
net.b{1} = bias;
a = sim(net, p); %menghitung f(net)
disp(‘f(net) :');
disp(a);
Hasil tampilan sebagai berikut :
Dari hasil pelatihan ini, dapat dilihat bahwa f(net) belum sama dengan target, sehingga
dilakukan perubahan bobot pada tahap selanjutnya.
5. Mengubah Bobot Pola P1 pada Perceptron :
Pada perceptron, setelah melakukan perhitungan f(net), maka dilakukanlah perubahan
bobot pada setiap pola yang ada, berikut ini perintah yang dapat diketikkan
function perceptronubahbobot
%mengubah bobot pola p1
p1 = [1 ; 1]; %input
p2 = [1 ; 0];
p3 = [0 ; 1];
p4 = [0 ; 0];
t1 = 1; %target
t2 = 0;
t3 = 0;
t4 = 0;
p = [p1 p2 p3 p4];
t = [t1 t2 t3 t4];
net = newp([0 1 ; 0 1], 1); %pembentukan jaringan
perceptron
bobot = [-1 1];
net.IW{1, 1} = bobot;
bias = [1];
net.b{1} = bias;
%a = sim(net, p); %menghitung f(net)
%disp(a);
%proses ubah bobot pola p1 disp('pola p1 : ')
a1 = sim(net,p1) e1 = t1 - a1
dW = learnp(bobot, p1, [], [], [], [], e1, [], [], [], [],
[])
bobot = bobot + dW
Hasil dari script di atas adalah
6. Pelatihan Jaringan Perceptron :
Melakukan perubahan bobot dan mencari bobot optimal, dapat digunakan perintah sim
dan learnp. Namun untuk mempermudah proses pelatihan perceptron, Matlab
menyediakan perintah kusus, yaitu :
net = train (net, p, t)
function trainperceptron
net = newp([0 1 ; 0 1], 1); %pembentukan jaringan
perceptron
net.IW{1, 1} = [-1 1];
net.b{1} = 1;
p = [[1 ; 1] [1 ; 0] [0 ; 1] [0 ; 0]];
t = [1 1 1 0];
net = train(net, p, t);
Hasil dari script tersebut
C. Jaringan Adaline
Langkah-langkah dalam pembuatan Jaringan Hebb pada Matlab dapat ditunjukkan sebagai
berikut :
1. Membentuk Jaringan Adaline
Jaringan Adaline baru, dapat dibentuk dari perintah :
net = newlin([0 10 ; 0 10], 1)
net.IW(1,1) = [2 3]
net.b [1] = [-4]
2. Program Jaringan Adaline dengan M-File/Script :
function adaline
%pembentukan jaringan adaline
net = newlin([-1 1 ; -1 1], 1);
%input logika AND
p = [[1 ; 1] [1 ; -1] [-1 ; 1] [-1 ; -1]];
t = [1 -1 -1 -1];
net.IW{1, 1} = [2 3];
net.b{1} = -4;
a = sim(net,p)
net = train(net,p,t) %training
disp(net.iw{1,1}) %perubahan bobot
disp(net.b{1}) %perubahan bias
a2 = sim(net,p) %ouput jaringan
error = t - sim(net,p)
Hasil
Bobot hasil iterasi :
Hasil pelatihan :
Output jaringan dan error :
D. Algoritma Backpropagation
Salah satu penerapan dari algoritma jaringan syaraf tiruan adalah untuk proses klasifikasi
citra. Berikut ini merupakan contoh aplikasi pemrograman matlab untuk melakukan klasifikasi
terhadap citra daun. Citra daun dikelompokkan ke dalam 4 kelas spesies yaitu Bougainvillea
sp, Geranium sp, Magnolia soulangeana, dan Pinus sp. Pada contoh ini digunakan 40 citra daun
yang terdiri dari 10 citra pada masing-masing kelas. Contoh dari citra daun yang digunakan
ditunjukkan pada gambar di bawah ini:
Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Mempersiapkan citra latih dan citra uji. Pada contoh ini 40 citra daun dibagi menjadi dua
bagian yaitu 24 citra untuk citra latih dan 16 citra untuk citra uji.
a. Citra latih berjumlah 24 citra yang terdiri dari 6 citra pada masing-masing kelas
b. Citra uji berjumlah 16 citra yang terdiri dari 4 citra pada masing-masing kelas
2. Melakukan pelatihan jaringan dengan tahapan-tahapan sebagai berikut:
a. Membaca citra latih
b. Segmentasi citra dengan metode thresholding pada kanal merah
c. Operasi morfologi untuk memperbaiki hasil segmentasi
d. Ekstraksi ciri bentuk berdasarkan parameter metric dan eccentricity
e. Menetapkan target latih (kelas Bougainvillea sp disimbolkan dengan angka 1,
kelas Geranium sp dengan angka 2, kelas Magnolia soulangeana dengan angka 3, dan
kelas Pinus sp dengan angka 4)
f. Membangun arsitektur jaringan syaraf tiruan propagasi balik
g. Melatih jaringan dengan hasil ekstraksi ciri sebagai masukannya
h. Menghitung akurasi hasil pelatihan
Source code proses pelatihan jaringan adalah sebagai berikut:
clc;clear;close all;
image_folder = 'Citra Latih';
filenames = dir(fullfile(image_folder, '*.jpg'));
total_images = numel(filenames);
for n = 1:total_images
full_name= fullfile(image_folder, filenames(n).name);
I = imread(full_name);
J = I(:,:,1);
K = im2bw(J,.6);
L = imcomplement(K);
str = strel('disk',5);
M = imclose(L,str);
N = imfill(M,'holes');
O = bwareaopen(N,5000);
stats = regionprops(O,'Area','Perimeter','Eccentricity');
area(n) = stats.Area;
perimeter(n) = stats.Perimeter;
metric(n) = 4*pi*area(n)/(perimeter(n)^2);
eccentricity(n) = stats.Eccentricity;
end
input = [metric;eccentricity];
target = zeros(1,24);
target(:,1:6) = 1;
target(:,7:12) = 2;
target(:,13:18) = 3;
target(:,19:24) = 4;
net = newff(input,target,[10 5],{'logsig','logsig'},'trainlm');
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-6;
net = train(net,input,target);
output = round(sim(net,input));
save net.mat net
[m,n] = find(output==target);
akurasi = sum(m)/total_images*100
Salah satu tampilan citra hasil pengolahan ditunjukkan pada gambar di bawah ini:
Sedangkan tampilan proses pelatihan jaringan yaitu:
Hasil klasifikasi proses pelatihan ditunjukkan pada tabel berikut:
Berdasarkan pada tabel tersebut, akurasi yang dihasilkan sistem dalam proses pelatihan adalah
24/24*100% = 100%.
3. Melakukan pengujian jaringan dengan tahapan-tahapan sebagai berikut:
a. Membaca citra uji
b. Segmentasi citra dengan metode thresholding pada kanal merah
c. Operasi morfologi untuk memperbaiki hasil segmentasi
d. Ekstraksi ciri bentuk berdasarkan parameter metric dan eccentricity
e. Menetapkan target uji (kelas Bougainvillea sp disimbolkan dengan angka 1, kelas
Geranium sp dengan angka 2, kelas Magnolia soulangeana dengan angka 3, dan kelas
Pinus sp dengan angka 4)
f. Memanggil jaringan syaraf tiruan propagasi balik yang telah dibuat pada proses
pelatihan
g. Menguji jaringan dengan hasil ekstraksi ciri sebagai masukannya
h. Menghitung akurasi hasil pengujian
Source code proses pengujian jaringan adalah sebagai berikut:
clc;clear;close all;
image_folder = 'Citra Uji';
filenames = dir(fullfile(image_folder, '*.jpg'));
total_images = numel(filenames);
for n = 1:total_images
full_name= fullfile(image_folder, filenames(n).name);
I = imread(full_name);
J = I(:,:,1);
K = im2bw(J,.6);
L = imcomplement(K);
str = strel('disk',5);
M = imclose(L,str);
N = imfill(M,'holes');
O = bwareaopen(N,5000);
stats = regionprops(O,'Area','Perimeter','Eccentricity');
area(n) = stats.Area;
perimeter(n) = stats.Perimeter;
metric(n) = 4*pi*area(n)/(perimeter(n)^2);
eccentricity(n) = stats.Eccentricity;
end
input = [metric;eccentricity];
target = zeros(1,16);
target(:,1:4) = 1;
target(:,5:8) = 2;
target(:,9:12) = 3;
target(:,13:16) = 4;
load net
output = round(sim(net,input));
[m,n] = find(output==target);
akurasi = sum(m)/total_images*100
Hasil klasifikasi proses pengujian ditunjukkan pada tabel berikut:
Pada tabel di atas terdapat satu kelas citra daun yang diklasifikasikan dengan salah sehingga akurasi
yang dihasilkan jaringan dalam proses pengujian adalah sebesar 15/16*100% = 93,75%.
Akurasi yang dihasilkan sistem baik pada proses pelatihan maupun pengujian menunjukkan bahwa
metode yang digunakan dapat mengklasifikasikan citra daun dengan baik.
4. Membuat tampilan GUI Matlab
Source code GUI Matlab untuk proses klasifikasi citra daun adalah sebagai berikut:
function varargout = Klasifikasi_daun(varargin)
% KLASIFIKASI_DAUN MATLAB code for Klasifikasi_daun.fig
% KLASIFIKASI_DAUN, by itself, creates a new KLASIFIKASI_DAUN or raises the
existing
% singleton*.
%
% H = KLASIFIKASI_DAUN returns the handle to a new KLASIFIKASI_DAUN or the
handle to
% the existing singleton*.
%
% KLASIFIKASI_DAUN('CALLBACK',hObject,eventData,handles,...) calls the
local
% function named CALLBACK in KLASIFIKASI_DAUN.M with the given input
arguments.
%
% KLASIFIKASI_DAUN('Property','Value',...) creates a new KLASIFIKASI_DAUN
or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Klasifikasi_daun_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Klasifikasi_daun_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Klasifikasi_daun
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Klasifikasi_daun_OpeningFcn, ...
'gui_OutputFcn', @Klasifikasi_daun_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Klasifikasi_daun is made visible.
function Klasifikasi_daun_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Klasifikasi_daun (see VARARGIN)
% Choose default command line output for Klasifikasi_daun
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');
% UIWAIT makes Klasifikasi_daun wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Klasifikasi_daun_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[nama_file,nama_path] = uigetfile({'*.*'});
if ~isequal(nama_file,0)
I = imread(fullfile(nama_path,nama_file));
axes(handles.axes1)
imshow(I)
handles.I = I;
guidata(hObject,handles)
else
return
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
I = handles.I;
J = I(:,:,1);
K = im2bw(J,.6);
L = imcomplement(K);
str = strel('disk',5);
M = imclose(L,str);
N = imfill(M,'holes');
O = bwareaopen(N,5000);
stats = regionprops(O,'Area','Perimeter','Eccentricity');
area = stats.Area;
perimeter = stats.Perimeter;
metric = 4*pi*area/(perimeter^2);
eccentricity = stats.Eccentricity;
input = [metric;eccentricity];
load net
output = round(sim(net,input));
axes(handles.axes2)
imshow(O)
if output == 1
kelas = 'Bougainvillea';
elseif output == 2
kelas = 'Geranium';
elseif output == 3
kelas = 'Magnolia soulangeana';
elseif output == 4
kelas = 'Pinus';
end
set(handles.edit1,'String',kelas)
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a
double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
Tampilan GUI Matlab ditunjukkan pada gambar-gambar berikut ini:
a. Tampilan Awal
b. Pengolahan citra daun untuk kelas Bougainvillea sp
c. Pengolahan citra daun untuk kelas Geranium sp
d. Pengolahan citra daun untuk kelas Magnolia soulangeana
e. Pengolahan citra daun untuk kelas Pinus sp
E. Algoritma
Matlab merupakan bahasa pemrograman dengan kemampuan tinggi dalam bidang
komputasi. Matlab memiliki kemampuan mengintegrasikan komputasi, visualisasi, dan
pemrograman. Oleh karenanya, matlab banyak digunakan dalam bidang riset‐riset yang
memerlukan komputasi numerik yang kompleks. Penggunaan Matlab meliputi bidang–
bidang:
Contoh: >>
var1=6
.7
var1 =
6.7