//Backpropagation Neural Network for simulating XOR Problem //Programmed by: Denny Hermawanto //Acoustics & Vibration Laboratory, KIM-LIPI INDONESIA, 2006 //Mail:
[email protected] import java.util.Random; class ProjectNN{ private void DefineInput(){ inputpattern = new double[numberofpattern][patterndimension]; inputpattern[0][0] = 0; inputpattern[0][1] = 0; inputpattern[1][0] = 0; inputpattern[1][1] = 1; inputpattern[2][0] = 1; inputpattern[2][1] = 0; inputpattern[3][0] = 1; inputpattern[3][1] = 1; } private void DefineTarget(){ targetpattern = new double[numberofpattern]; targetpattern[0] targetpattern[1] targetpattern[2] targetpattern[3]
= = = =
0; 1; 1; 0;
} private double RandomNumberGenerator(){ java.util.Random rnd = new Random();//new java.util.Random(new Date().getTime()); return rnd.nextDouble(); } private void CreateNetworks(){ numberofinputneuron = patterndimension; numberofhiddenneuron = 2; numberofoutputneuron = targetdimension; //inputlayer = new double[numberofinputneuron]; hiddenlayer = new double[numberofhiddenlayer][numberofhiddenneuron]; backpropagationhiddenlayer = new double[numberofhiddenlayer][numberofhiddenneuron]; errorhidden = new double[numberofhiddenlayer][numberofhiddenneuron]; outputlayer = new double[numberofoutputneuron]; outputerror = new double[numberofoutputneuron]; activatedhiddenlayer = new double[numberofhiddenlayer][numberofhiddenneuron]; activatedoutputlayer = new double[numberofoutputneuron]; patternerror = new double[numberofpattern]; weights = new double[2][][];
weights[0] = new double[numberofinputneuron+1][numberofhiddenneuron]; weights[1] = new double[numberofhiddenneuron+1][numberofoutputneuron]; deltaweights = new double[2][][]; deltaweights[0] = new double[numberofinputneuron+1][numberofhiddenneuron]; deltaweights[1] = new double[numberofhiddenneuron+1][numberofoutputneuron]; deltaweightsbuffer = new double[2][][]; deltaweightsbuffer[0] = new double[numberofinputneuron+1][numberofhiddenneuron]; deltaweightsbuffer[1] = new double[numberofhiddenneuron+1][numberofoutputneuron]; SSE = new double[maxiteration]; System.out.println("InputToHiddenWeigth:"); for(int i=0;i<=numberofinputneuron;i++){ for(int j=0;j
result = ActivationFunction(value) * (1 ActivationFunction(value)); break; case 2: result = 0.5 * (1 + ActivationFunction(value)) * (1 ActivationFunction(value)); break; case 3: result = (1 + ActivationFunction(value)) * (1 ActivationFunction(value)); break; default: result = ActivationFunction(value) * (1 ActivationFunction(value)); break; } return result; } private void FeedForward(int iteration){ for(int iter=0;iter
} for(int i=0;i
for(int i=0;i
for(int i=0;i
private private private private private private
int int int int int int
numberofhiddenneuron; numberofinputneuron; numberofoutputneuron; numberofhiddenlayer; activationtype; maxiteration;
public static final int BINARY_SIGMOID = 1; public static final int BIPOLAR_SIGMOID = 2; public static final int HYPERBOLIC_TANGENT = 3; public static void main(String[] args){ ProjectNN NN = new ProjectNN(); NN.numberofpattern = 4; NN.patterndimension = 2; NN.targetdimension = 1; NN.numberofhiddenlayer = 1; NN.activationtype = BIPOLAR_SIGMOID; NN.learningrate = 0.5; NN.momentum = 0.8; NN.maxiteration = 100; NN.RunNN(); } }