modul perceptron java
TRANSCRIPT
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:
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];
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;
}
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){
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()){
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;
}
}
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);
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
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
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
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.