Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
MODUL 1 SINGLE LAYER PERCEPTRON A. Tujuan Membangun jaringan syaraf tiruan Perceptron dengan pemorgraman berorientasi objek java untuk menyelesa m enyelesaikan ikan 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: ◦
WHT 2011
Halaman :
1
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
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]; WHT 2011
Halaman :
2
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret 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
} 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;
} WHT 2011
Halaman :
3
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret public void hitung_output(float teta){ float temp=0; for (int j=0;j
temp = temp + super.output[j]; } super.output[j] = this.transfer(temp,teta);
} } public void update_bobot(float rate){ for(int j=0;j
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
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){ WHT 2011
Halaman :
4
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret 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
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()){ WHT 2011
Halaman :
5
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
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;
} }
WHT 2011
Halaman :
6
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
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
Halaman :
7
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
} } } //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 0
1 0 1
1 1 1
0
0
1
1
WHT 2011
Halaman :
8
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
3. Menentukan target berbdasarkan pola input jaringan syaraf tiruan Input 1
Input 2
Bias
Target
1
1 0 1 0
1 1 1 1
1 -1 -1 -1
1 0 0
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
WHT 2011
Halaman :
9
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
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
WHT 2011
Halaman : 10
Riset Group Ilmu Rekayasa & Komputasi Informatika, Universitas Sebelas Maret
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.
WHT 2011
Halaman : 11