Implementasi Feed Forward Neural Network dalam ...

2 downloads 0 Views 132KB Size Report
network menggunakan beberapa kelas Java , diantaranya : 1. Perceptron.java. (Kelas Perceptron). 2. MLPerceptron.java (Kelas Multilayer Perceptron). 3. ANN.
Implementasi Feed Forward Neural Network dalam Bahasa JAVA 1. Feed Forward Neural Network

Implementasi algoritma pengklasifikasian dengan feed forward neural network menggunakan beberapa kelas Java , diantaranya : 1. Perceptron.java 2. MLPerceptron.java 3. ANN.java

(Kelas Perceptron) (Kelas Multilayer Perceptron) (Kelas Multilayer Perceptron, dapat

dikenali WEKA) Berikut adalah method dan atribut pada masing masing kelas

1.

Kelas Perceptron (Perceptron.Java)

Method & Atribut List inputs List weights List weightedInputs

Double summed Double output Double learningRate Double error Double sigmoid(Double x) Double proses(List x) Void updateWeight(double desiredOutput)

Kegunaan List input seluruh sinyal yang memasuki perceptron ( X0 ,X1 , ... , Xn) List seluruh bobot pada perceptron ( w0 , w1 , ... , wn) List input seluruh sinyal yang sudah dikalikan dengan bobot yang bersesuaian (X0 * w0 , X1 * w1 , ... , Xn * Wn) Total keseluruhan bilangan pada list weightedInputs Hasil fungsi sigmoid terhadap atribut summed. Learning Rate dari perceptron Nilai error pada perceptron Fungsi sigmoid Menerima seluruh sinyal, menghasilkan nilai output pada perceptron Melakukan update pada weight berdasarkan desired output

2.

Kelas Multilayer Perceptron (MLPerceptron.Java)

Method & Atribut List hiddenLayer List outputLayer List desiredOutput Int nHiddenLayerNeuron Int nOutputLayerNeuron Int nInput Int nClass Double learningRate Double output Double proses(List x) Void updateWeight(double doutput) 3.

List sinyal output yang diinginkan. Berdasarkan data latih. Jumlah perceptron pada hidden layer Jumlah perceptron pada output layer Jumlah sinyal input pada Multilayer Perceptron Jumlah kelas klasifikasi Learning rate multilayer perceptron. Hasil kelas klasifikasi oleh Multilayer Perceptron Menerima seluruh sinyal, menghasilkan nilai output pada multilayer perceptron. Melakukan update pada weight berdasarkan desired output

Kelas Multilayer Perceptron , dikenali WEKA (ANN.java)

Method & Atribut Instances trainData MLPerceptron ml Int numInput Int numOutput Double learningrate Int numHiddenLayerNeuron Void buildClassifier(Instances data) Double

Kegunaan List seluruh perceptron pada hiddenLayer List seluruh perceptron pada outputLayer

Kegunaan Seluruh instances data latih Multilayer Perceptron Jumlah atribut pada instance. Jumlah kelas klasifikasi pada data latih. Learning rate FFNN Jumlah perceptron pada hiddenlayer. Melakukan pembuatan model pembelajaran berdasarkan instances data latih yang dimasukkan. Melakukan pengklasifikasian terhadap

classifyInstances(Instance instance)

instance tunggal berdasarkan moodel pembelajaran yang telah dibuat

Berikut adalah source code dari program (Dapat diakses online di https://github.com/adipurnama141/NB-FFNN)

Perceptron.Java import import import import

java.util.ArrayList; java.util.List; java.lang.Math; java.util.Random;

public class Perceptron { private private private private private private private private

int nInput; List inputs = new ArrayList(); List weights = new ArrayList(); List weightedInputs = new ArrayList(); Double summed; Double output; Double learningRate; double error;

private static Double sigmoid(Double x){ return (1/(1 + Math.pow(Math.E,(-1*x))));} public void showWeights(){ for (int i = 0; i < weights.size() ; i++){ System.out.println(weights.get(i));}} public Double getOutput(){ return output;} public Double process(List in){ //tambahkan bias this.inputs = new ArrayList(in); inputs.add(0, new Double(1)); //System.out.println("Inputs w Bias : " + inputs); //System.out.println("Weight : "+weights); //weight input for(int i=0 ; i < inputs.size() ; i++){

weightedInputs.set(i, weights.get(i) * inputs.get(i) ); }

//System.out.println("Weighted Inputs : " + weightedInputs);

//summer summed = new Double(0); for (int i=0 ; i < weightedInputs.size() ; i++) { summed = summed + weightedInputs.get(i); }

//System.out.println("Sum :" + summed);

//activation function output = sigmoid(summed);

//System.out.println("Sigmoid : " + output); //System.out.println(""); return output; }

public Double getWeight(int idx){ return weights.get(idx); }

public void setError(double e){

error = e; }

public double getError(){ return error; }

public void updateWeight(){ //System.out.println("Error : " + error); double oldweight; double newWeight; for(int i=0 ; i< weights.size() ; i++){ oldweight = weights.get(i); newWeight = weights.get(i) + (learningRate * error * inputs.get(i)); weights.set(i ,newWeight );

//System.out.println(oldweight +"->"+ newWeight); } }

public void updateWeight(double desiredOutput){ double newWeight; error = desiredOutput - output; for(int i=0 ; i< weights.size() ; i++){

newWeight = weights.get(i) + (learningRate * error * inputs.get(i)); weights.set(i ,newWeight ); } }

public Perceptron(int nInput , double learningRate){ this.nInput = nInput; this.learningRate = new Double(learningRate);

Random rnd = new Random(); for (int i = 0 ; i max) { max = current; maxidx = i; } }

if (nClass == 2) { if (max > 0.5) { output = 1; } else { output = 0; } } else { output = maxidx; }

}

public void process(List in){

List hiddenLayerResult; //System.out.println("FEED FORWARD ANN (BEGIN)"); //System.out.println("Input : " + in); //System.out.println("----------------------------------------------------------"); //System.out.println("");

//System.out.println("PROPAGATE");

if (!noHiddenLayer){ //proses pada hidden layer for(int i = 0 ; i < nHiddenLayerNeuron ; i++){ //System.out.println("HiddenLayer Neuron #" + i); hiddenLayer.get(i).process(in); }

//buat list hasil proses hidden layer hiddenLayerResult= new ArrayList(); for (int i = 0; i < nHiddenLayerNeuron ; i++){

hiddenLayerResult.add(hiddenLayer.get(i).getOutput()); } } else { hiddenLayerResult = in; }

//System.out.println("Processing Hidden Layer : " + hiddenLayerResult); //System.out.println("");

//proses pada output layer for(int i = 0 ; i < nOutputLayerNeuron ; i++){ //System.out.println("OutputLayer Neuron #"+i); outputLayer.get(i).process(hiddenLayerResult); }

determineOutput();

//System.out.println("Processing Output Layer : "); for(int i = 0 ; i

Suggest Documents