pemrograman matlab untuk jaringan syaraf tiruan

27
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

Upload: others

Post on 25-Jun-2022

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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

Page 2: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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 :

Page 3: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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 :

Page 4: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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

Page 5: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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];

Page 6: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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

Page 7: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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]];

Page 8: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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]

Page 9: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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 :

Page 10: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

Hasil pelatihan :

Page 11: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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

Page 12: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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,

Page 13: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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;

Page 14: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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:

Page 15: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

Sedangkan tampilan proses pelatihan jaringan yaitu:

Hasil klasifikasi proses pelatihan ditunjukkan pada tabel berikut:

Page 16: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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

Page 17: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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];

Page 18: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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:

Page 19: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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

Page 20: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

% 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.

Page 21: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

% 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.

Page 22: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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');

Page 23: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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)

Page 24: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

% 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

Page 25: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

b. Pengolahan citra daun untuk kelas Bougainvillea sp

c. Pengolahan citra daun untuk kelas Geranium sp

Page 26: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

d. Pengolahan citra daun untuk kelas Magnolia soulangeana

e. Pengolahan citra daun untuk kelas Pinus sp

Page 27: PEMROGRAMAN MATLAB UNTUK JARINGAN SYARAF TIRUAN

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