sandeshMC

EBPTA

Apr 1st, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.68 KB | None | 0 0
  1.  
  2. package javaapplication1;
  3. import java.util.Random;
  4.  
  5. class Sigmoid {
  6.  
  7.     public static double output(double x) {
  8.         return 1.0 / (1.0 + Math.exp(-x));
  9.     }
  10.  
  11.     public static double derivative(double x) {
  12.         return x * (1 - x);
  13.     }
  14. }
  15.  
  16. class Neuron {
  17.  
  18.     public double[] inputs = new double[2];
  19.     public double[] weights = new double[2];
  20.     public double error;
  21.  
  22.     private double biasWeight;
  23.  
  24.     //private Random r = new Random();
  25.     public double output() {
  26.         return Sigmoid.output(weights[0] * inputs[0] + weights[1] * inputs[1] + biasWeight);
  27.     }
  28.  
  29.     public void randomizeWeights() {
  30.         weights[0] = Math.random();
  31.         weights[1] = Math.random();
  32.         biasWeight = Math.random();
  33.     }
  34.  
  35.     public void adjustWeights() {
  36.         weights[0] += (error * inputs[0]);
  37.         weights[1] += (error * inputs[1]);
  38.         biasWeight += error;
  39.     }
  40. }
  41.  
  42. public class ErrorBackProp {
  43.  
  44.     static void train() {
  45.         // the input values
  46.         double inputs[][] = {{0, 0}, {0, 1}, {1, 0}, {1, 1}};
  47.  
  48.         // desired results
  49.         double[] results = {0, 1, 1, 0};
  50.  
  51.         // creating the neurons
  52.         Neuron hiddenNeuron1 = new Neuron();
  53.         Neuron hiddenNeuron2 = new Neuron();
  54.         Neuron outputNeuron = new Neuron();
  55.  
  56.         // random weights
  57.         hiddenNeuron1.randomizeWeights();
  58.         hiddenNeuron2.randomizeWeights();
  59.         outputNeuron.randomizeWeights();
  60.  
  61.         int iter = 0;
  62.  
  63.         while (iter != 1000) {
  64.             for (int i = 0; i < 4; i++) {
  65.                 hiddenNeuron1.inputs = inputs[i];
  66.                 hiddenNeuron2.inputs = inputs[i];
  67.  
  68.                 outputNeuron.inputs[0] = hiddenNeuron1.output();
  69.                 outputNeuron.inputs[1] = hiddenNeuron2.output();
  70.                 System.out.println(" " + inputs[i][0] + " XOR " + inputs[i][1] + " = " + outputNeuron.output());
  71.                 outputNeuron.error = Sigmoid.derivative(outputNeuron.output()) * (results[i] - outputNeuron.output());
  72.  
  73.                 outputNeuron.adjustWeights();
  74.                 hiddenNeuron1.error = Sigmoid.derivative(hiddenNeuron1.output()) * outputNeuron.error * outputNeuron.weights[0];
  75.                 hiddenNeuron2.error = Sigmoid.derivative(hiddenNeuron2.output()) * outputNeuron.error * outputNeuron.weights[1];
  76.  
  77.                 hiddenNeuron1.adjustWeights();
  78.  
  79.                 hiddenNeuron2.adjustWeights();
  80.             }
  81.             iter++;
  82.         }
  83.     }
  84.  
  85.     public static void main(String args[]) {
  86.         train();
  87.     }
  88.  
  89. }
  90. /*
  91.  0.0 XOR 0.0 = 0.08062228800032477
  92.  0.0 XOR 1.0 = 0.9132704801375265
  93.  1.0 XOR 0.0 = 0.913499390340217
  94.  1.0 XOR 1.0 = 0.10087040324942716
  95.  */
Add Comment
Please, Sign In to add comment