modul perceptron java

11
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret WHT 2011 Halaman : 1 MODUL 1 SINGLE LAYER PERCEPTRON A. Tujuan Membangun jaringan syaraf tiruan Perceptron dengan pemorgraman berorientasi objek java untuk menyelesaikan suatu kasus B. Pendahuluan Jaringan syaraf tiruan perceptron adalaha suatu jaringan syaraf dengan arsitektur single layer. Arsitetkru jst tersebut adalah : Output Layer Input Layer Jika arsitektur jaringan syaraf seperti gambar tersebut maka dapat kita bagi menjadi sebuah class super class layer dan sub class input layer dan output layer. Layer Input_layer Output_layer Dengan algoritma pembelajaran perceptron : Inisialisasi semua bobot dan bias (untuk sederhananya set saja ke nilai nol) Set learning rate : (0 < α ≤1) Selama kondisi berhenti bernilai false, maka lakukan langkah-langkah berikut : Untuk setipa pasangan pembelajaran s-t, kerjakan Set input dengan nilai sama dengan vektor input:

Upload: ferry-andriyanto

Post on 05-Jul-2015

599 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 1

MODUL 1

SINGLE LAYER PERCEPTRON

A. Tujuan

Membangun jaringan syaraf tiruan Perceptron dengan pemorgraman berorientasi

objek java untuk menyelesaikan suatu kasus

B. Pendahuluan

Jaringan syaraf tiruan perceptron adalaha suatu jaringan syaraf dengan arsitektur

single layer. Arsitetkru jst tersebut adalah :

Output Layer

Input Layer Jika arsitektur jaringan syaraf seperti gambar tersebut maka dapat kita bagi menjadi

sebuah class super class layer dan sub class input layer dan output layer.

Layer

Input_layer Output_layer

Dengan algoritma pembelajaran perceptron :

Inisialisasi semua bobot dan bias (untuk sederhananya set saja ke nilai nol) Set

learning rate : (0 < α ≤1)

Selama kondisi berhenti bernilai false, maka lakukan langkah-langkah berikut :

◦ Untuk setipa pasangan pembelajaran s-t, kerjakan

Set input dengan nilai sama dengan vektor input:

Page 2: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 2

xi=si

Hitung respon untuk unit outputnya

y_in = b + ∑xi*wi

Perbaiki bobot dan bias jika terjadi kesalahan:

Jika y ≠ t maka

wi(baru) = wi(lama) + α*t*xi

b(baru) = b(lama) + α*t

Jika tidak maka,

wi(baru) = wi(lama)

b(baru) = b(lama)

◦ Test kondisi berhenti : jika tidak terjadi perubahan bobot maka kondisi

berhenti TRUE, namun jika masih terjadi perubahan maka kondisi

berhenti FALSE

C. Praktikum

Implementasi dari arsitektur single layer dengan metode pembelajaran perceptron

adalah sebagai berikut :

Untuk class layer codingnya sebagai berikut :

public class layer {

protected int jum_input;

protected int jum_output;

protected float input[];

protected float output[];

}

Untuk class input_layer codingnya sebagai berikut:

class input_layer extends layer {

public input_layer (int a, int b){

super.jum_input = a;

super.jum_output = b;

super.input = new float[a];

Page 3: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 3

super.output = new float[b];

}

public void input(float[] masuk){

super.input = masuk;

}

public void output(float[] keluar){

super.output = keluar;

}

}

Untuk class output_layer codingnya sebagai berikut :

class output_layer extends layer {

protected float bobot[][];

protected float target[];

protected float error[];

public output_layer(int a, int b){

super.jum_input = a;

super.jum_output =b;

this.bobot = new float[a][b];

this.target = new float[b];

this.error = new float[b];

this.input = new float[a];

this.output = new float[b];

}

public void inisialiasai_bobot(){

for(int i=0;i<super.jum_input;i++)

for(int j=0;j<super.jum_output;j++)

this.bobot[i][j]=0.0f;

}

public float transfer(float a, float teta){

if (a >teta)

return 1.0f;

else if ((a >= -teta) && (a <= teta))

return 0.0f;

else

return -1.0f;

}

Page 4: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 4

public void hitung_output(float teta){

float temp=0;

for (int j=0;j<super.jum_output;j++){

for(int i=0;i<super.jum_input;i++){

super.output[j]=super.input[i]*bobot[i][j];

temp = temp + super.output[j];

}

super.output[j] = this.transfer(temp,teta);

}

}

public void update_bobot(float rate){

for(int j=0;j<super.jum_output;j++){

if (this.output[j] != this.target[j]){

for(int i=0;i<super.jum_input;i++){

bobot[i][j] = bobot[i][j] + rate*this.target[j]*this.input[i];

}

}

}

}

public void write_bobot(String file){

try {

FileOutputStream fos = new FileOutputStream(file,true);

PrintStream ps = new PrintStream(fos);

for (int i=0;i<super.jum_input;i++){

for(int j=0;j<super.jum_output;j++){

ps.print(this.bobot[i][j]);

ps.print(" ");

}

}

ps.println();

ps.close();

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public void read_bobot(String file){

Page 5: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 5

try {

FileInputStream fis = new FileInputStream(file);

DataInputStream dis = new DataInputStream(fis);

String isi;

float temp[] = new float[super.jum_input*super.jum_output];

while ((isi = dis.readLine()) !=null){

StringTokenizer st = new StringTokenizer(isi," ");

int k=0;

while (st.hasMoreTokens()){

temp[k] = Float.valueOf((String) st.nextElement());

k++;

}

}

int h=0;

for(int i=0;i<super.jum_input;i++){

for(int j=0;j<super.jum_output;j++){

this.bobot[i][j] = temp[h];

h++;

}

}

dis.close();

fis.close();

} catch (Exception e){

e.printStackTrace();

}

}

public float[][] baca_input(String file, int pola){

float sementara[][] = new float[pola][super.jum_input];

try {

FileInputStream fis = new FileInputStream(file);

DataInputStream dis = new DataInputStream(fis);

String isi;

int h=0;

while ((isi = dis.readLine()) !=null){

StringTokenizer st = new StringTokenizer(isi," ");

int k=0;

while (st.hasMoreTokens()){

Page 6: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 6

sementara[h][k] = Float.valueOf((String) st.nextElement());

k++;

}

h++;

}

dis.close();

fis.close();

} catch (Exception e){

e.printStackTrace();

}

return sementara;

}

public float[][] baca_target(String file, int pola){

float sementara[][] = new float[pola][super.jum_output];

try {

FileInputStream fis = new FileInputStream(file);

DataInputStream dis = new DataInputStream(fis);

String isi;

int h=0;

while ((isi = dis.readLine()) !=null){

StringTokenizer st = new StringTokenizer(isi," ");

int k=0;

while (st.hasMoreTokens()){

sementara[h][k] = Float.valueOf((String) st.nextElement());

k++;

}

h++;

}

dis.close();

fis.close();

} catch (Exception e){

e.printStackTrace();

}

return sementara;

}

}

Page 7: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 7

Untuk class jaringan codingnya sebagai berikut :

public class jaringan {

private String file_input;

private String file_target;

private String file_bobot;

private output_layer keluar;

private input_layer masuk;

public jaringan(String bobot){

this.file_bobot = bobot;

}

public jaringan(String file_input, String file_target, String file_bobot) {

super();

this.file_input = file_input;

this.file_target = file_target;

this.file_bobot = file_bobot;

}

public void membangun_jaringan(int input, int output){

this.masuk = new input_layer(input, input);

this.keluar = new output_layer(this.masuk.jum_output,output);

}

public void konfigInputOutput(){

this.masuk.output = this.masuk.input;

this.keluar.input = this.masuk.output;

}

public void pelatihan(int jum_pola, int epoh){

this.keluar.inisialiasai_bobot();

float awal[][] = this.keluar.baca_input(this.file_input,jum_pola);

float tar[][] = this.keluar.baca_target(this.file_target, jum_pola);

this.keluar.write_bobot(this.file_bobot);

for(int h=0;h<epoh;h++){

for(int i=0;i<jum_pola;i++){

this.masuk.input = awal[i];

this.keluar.target = tar[i];

this.konfigInputOutput();

this.keluar.hitung_output(0.5f);

this.keluar.update_bobot(0.8f);

this.keluar.write_bobot(this.file_bobot);

Page 8: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 8

}

}

}

//proses setelah JST di latih

public float[] aplikasi(float input[]){

this.masuk.input = input;

this.konfigInputOutput();

this.keluar.read_bobot(this.file_bobot);

this.keluar.hitung_output(0.5f);

return this.keluar.output;

}

}

Berdasarkan class-class yang kita buat tersebut, maka dapat kita gunakan untuk

membangun suatu arsitektur jaringan syaraf tiruan dengan arsitektur single layer dan

metode pembelajaran perceptron. Dalam membangun suatu aplikasi jaringan syaraf

tiruan dilakukan beberapa tahap yaitu :

1. Indentifikasi permasalahan

2. Penentuan pola input jaringan syaraf tiruan

3. Penentuan target yang diinginkan berdasarkan pola input

4. Memilih dan membangun arsitektur jaringan syaraf tiruan yang digunakan.

5. Memilih metode training dan melakukan pelatihan terhadap jaringan syaraf tiruan

tersebut menggunakan data pola input dan target (untuk supervised training).

6. Melakukan uji coba aplikasi jaringan syaraf tiruan hasil training.

Kasus :

Bangunlah suatu jaringan syaraf tiruan yang mampu mengenali gerbang logika AND.

Solusi :

1. Indentifikasi permasalahan

Gerbang logika AND mempunyai dua inputan dengan output akan bernilai 1 jika

semua inputnya bernilai 1 dan -1 untuk inputnya ada yang bernilai 0.

2. Menentukan pola input jaringan syaraf tiruan :

Input 1 Input 2 Bias

1 1 1

1 0 1

0 1 1

0 0 1

Page 9: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 9

3. Menentukan target berbdasarkan pola input jaringan syaraf tiruan

Input 1 Input 2 Bias Target

1 1 1 1

1 0 1 -1

0 1 1 -1

0 0 1 -1

4. Memilih arsitektur : dalam kasus ini kita mabil arsitektur single layer feedforward

5. Menggunakan metode pelatihan perceptron. Berikut conding proses pelatihannnya

dengan menggunakan class-class yang sudah dibuat sebelumnya :

Ket :

Pola input disimpan dalam file : masuk.txt

Pola output/target disimpan dalm file : target.txt

Bobot hasil pelatihan disimpan dalam file : bobot.txt (akan diabuat secara otomatis)

public void training(){ jaringan isi = new jaringan("masuk.txt","target.txt","bobot.txt"); isi.membangun_jaringan(3, 1); isi.pelatihan(4, 9); }

6. Melakukan uji coba terhadap jaringan syaraf tiruan berdasarkan bobot hasil

pelatihan. Berikut coding darin ujicoba jaringan syaraf tiruan :

public void ujicoba(float input1, float input2){ jaringan isi = new jaringan("bobot.txt"); isi.membangun_jaringan(3, 1); float[] data ={input1,input2,1}; float hasil[] = isi.aplikasi(data); System.out.println("Keluarannya : "+hasil[0]); }

7. Berikut coding lengkap dari jaringan syaraf tiruan untuk proses pelatihan dan

ujicoba. Sebagai catatan, proses training dilakukan sebelum ujicoba. Jika sudah

Page 10: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 10

selesai training maka dapat dilakukan ujicoba berulang kali. Jangan melakukan

training bersamaan dengan ujicoba.

import lib.jaringan; public class simulasi { public void training(){ jaringan isi = new jaringan("masuk.txt","target.txt","bobot.txt"); isi.membangun_jaringan(3, 1); isi.pelatihan(4, 9); } public void ujicoba(float input1, float input2){ jaringan isi = new jaringan("bobot.txt"); isi.membangun_jaringan(3, 1); float[] data ={input1,input2,1}; float hasil[] = isi.aplikasi(data); System.out.println("Keluarannya : "+hasil[0]); } public static void main(String[] args){ simulasi test = new simulasi(); test.training(); //jika training sedang dijalankan maka non-aktifkan method ujicoba test.ujicoba(1,1); //jika dilakukan ujicoba, non-aktifkan method training. } }

D. Latihan

1. Pada Jurusan Teknik Informatika Fakultas MIPA, akan membuat system untuk

menentukan konsentrasi bidang minat keahlian mahasiswa dengan menfaatkan

Jaringan Syaraf Tiruan Perceptron (single layer perceptron). Konsentrasi tersebut

dibagi menjadi 3 cluster yaitu :

a. Distributed System

b. Soft Computing

c. Information System

Dalam menentukan masuk bidang minat apa seorang mahasiswa, ditentukan oleh

variable matakuliah. Matakuliah tersebut adalah :

a. Jaringan Komputer

b. System Terdistribusi

c. Konsep Pemrograman

d. Jaringan Syaraf Tiruan

e. Logika Samar

Page 11: Modul Perceptron Java

Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret

WHT 2011 Halaman : 11

f. Rekayasa Perangkat Lunak

g. Analisis Perancangan Sistem Informasi

h. Proyek Perangkat Lunak

Ketentuan yang berlaku atas matakuliah-matakuliah tersebut adalah

1. Jika ingin masuk bidang minat Distributed System, maka matakuliah jaringan

komputer, system terdistribusi dan konsep pemrograman bernilai BAIK (1),

sedangkan lainnya bernilai minimal CUKUP (0).

2. Jika ingin masuk bidang minat Soft Computing, maka matakuliah jaringan

syaraf tiruan, logika samar dan Konsep pemrograman bernilai BAIK (1),

sedangkan lainnya bernilai minimal CUKUP (0).

3. Jika ingin masuk bidang minat Information System, maka matakulia Rekayasa

perangkat lunak, analisis perancangan system informasi, proyek perangkat

lunak dan konsep pemrograman bernilai BAIK (1), sedangkan lainnya bernilai

minimal CUKUP (0).

E. Referensi

1. Kusumadewi, Sri. 2004. Membangun Jaringan Syaraf Tiruan Menggunakan

Matlab dan Excel Link. Graha Ilmu. Yogayakarta.

2. Diyah puspitaningrum, 2006. Pengantar Jaringan saraf Tiruan. Andi. Yogyakarta.