Rabu, 11 Oktober 2017

Implementasi Jaringan Syaraf Tiruan Perceptron dengan JAVA



Aturan belajar (learning) perceptron lebih handal jika di banding aturan heb (heb rule). Dengan asumsi yang sesuai prosedur belajar interatifnya, dapat dibuktikan dengan konvergenya ke bobot yang benar, yakni bobot yang memungkinkan jaringan menghasilkan nilai output yang benar untuk setiap pola input pelatihan (Hermawan, 2006).
Merujuk pada penjelasan di atas penting untuk kita pelajari lebih lanjut bagaima perceptron bekerja, akan kita pelajari juga bagaimana mengimplementasikan perceptron dengan bahasa pemerograman java. Sebab dalam prinsifnya bahasa pemerograman apapun bisa digunakan dalam mengimplementasikan konsep jaringan syaraf tiruan.
Contoh kasus 1.a
Data Training
 
X1
X2
Target
0
0
0
0
1
0
1
0
0
1

1

 


Data training ini sebagai sumber pengetahuan dari sistem yang akan dibangun, algoritma dalam yang akan digunakan, agar lebih mudah sayagambarkan dalam Gambar 1.1 dibawah ini:
 
Gambar 1.1 algoritma perceptron dalam menyelesaikan contoh kasus 1.a

Langkah buka IDE eclips, lalu buat projek baru: projek ini saya namakan “JSTproj1” tampak sepert gambar 1.2 dibawah ini
 

Buat package, dan dua buah kelas, class pertama adalah class “Perceptron” dan class kedua adalah  kelas “Driver” dimana kelas driver sebagai kelas main untuk menjalankan program.
Berikut adalah source kode pada class Perceptron:

package satuNN;

public class Perceptron {
       public static final int [][][] andData = {{{0,0},{0}},
   {{0,1},{0}},
                                                    {{1,0},{0}},
                                                   {{1,1},{1}}};
      
       public static final double LEARNING_RATE =0.05;
       public static final double[] INITIAL_WEIGHT = {Math.random(), Math.random()};
      
       //buat method untuk menghitung bobot
       public double calculateWeightedSum(int[] data, double[] weights) {
              double weightedSum = 0;
              for(int x = 0; x < data.length; x++)
                     weightedSum += data[x] * weights[x];
              return weightedSum;
       }
       //method untuk fungsi Aktifasi
       public int applyActivationFunction(double weightedSum) {
              int result = 0;
              if(weightedSum > 1) result = 1;
              return result;
       }
       //method penyesuaian bobot
       public double [] adjustWeights(int[] data, double[] weights, double error) {
              double[] adjustWeights = new double[weights.length];
              for(int x=0; x < weights.length; x++)
                     adjustWeights[x] = LEARNING_RATE * error * data[x] + weights[x];
              return adjustWeights;
       }

}


Sorce code pada class Driver:
package satuNN;

public class Driver {
      
       public static void main(String[]args) {
              int[][][] data = Perceptron.andData;
              double[] weights = Perceptron.INITIAL_WEIGHT;
             
              Driver driver = new Driver();
              Perceptron perceptron = new Perceptron();
             
              int epochNumber = 0;
              boolean errorFlag  = true;
              double error = 0;
              double[]adjustedWeights = null;
             
              while(errorFlag) {
                     driver.printHeading(epochNumber++);
                     errorFlag = false;
                     error = 0;
                    
                     for(int x = 0; x < data.length; x++) {
                           double weightedSum = perceptron.calculateWeightedSum(data[x][0], weights);
                           int result = perceptron.applyActivationFunction(weightedSum);
                           error = data[x][1][0] - result;
                           if(error !=0) errorFlag = true;
                           adjustedWeights = perceptron.adjustWeights(data[x][0], weights, error);
                           driver.printVector(data[x], weights, result, error, weightedSum, adjustedWeights);
                           weights = adjustedWeights;
                     }
                    
              }
       }
       public void printHeading(int epochNumber) {
              System.out.println("\n===Epoch#"+epochNumber+"==========================");
       System.out.println("  w1  |  w2  | x1| x2|Target Hasil| Hasil | Error | Bobot Jumlah | adjusted W1 | adjusted W2");
       System.out.println("------------------------------------------------------");
       }
       public void printVector(int[][] data, double[] weights, int result, double error, double weightedSum, double[]adjustedWeights) {

System.out.println(" "+String.format("%.2f", weights[0])+ " | " +String.format("%.2f", weights[1])+ " | "+data[0][0]+ " | " +data[0][1]+
                           " |      "   +data[1][0]+ "     | "+result+ "     | " +error+ "   |     "+String.format("%.2f", weightedSum)+
                           "     |      " +String.format("%.2f", adjustedWeights[0])+ "   | " +String.format("%.2f", adjustedWeights[1]));}}

Dan apabila di jalankan akan tampil hasil seperti gambar 1.3 dibawah ini:

 

Gambar 1.3 Hasil pembelajaran dengan menggunakan metode perceptron

Demikian turorial implementasi Jaringan Syaraf Tiruan dengan metode perceptron, semoga bermanfaat. Jika ada yang kurang jelas silahkan meninggalkan komentar, untuk bisa terhubung dengan penulis silahkan kirim pesan melalui email : laluallistilo@gmail.com

Download File disini :


0 komentar:

Posting Komentar