Differences between revisions 18 and 34 (spanning 16 versions)
Revision 18 as of 2011-02-22 15:21:47
Size: 5598
Editor: JunHu
Comment:
Revision 34 as of 2016-12-12 20:50:49
Size: 6643
Editor: JunHu
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from AdmovelNeuralNetwork
Line 5: Line 5:
 * Follow the instructions from the assignment [[http://wiki.id.tue.nl/creapro|Creative Programming]] to prepare the SoftwareEnvironment, including Processing, Arduino and the AdMoVeo Robot. If you are not planning to use the GUI components from the Control``P5 library, you can skip the Control``P5 part.  * Follow the instructions from the assignment [[http://wiki.id.tue.nl/creapro|Creative Programming]] to install Processing and if needed, Arduino software environment.
Line 7: Line 7:
  * Download [[http://garr.dl.sourceforge.net/project/neuroph/neuroph%202.5/neurophstudio-windows.exe | Neuroph Studio]] and install it.
  * Download [[http://sourceforge.net/projects/neuroph/files/neuroph%202.5/neuroph-2.5b.zip/download | neuroph-2.5b.zip]]. Unzip it into C:\Programs. In C:\Programs\neuroph-2.5b you shall be able to find neuroph-2.5b.jar. (You can unzip it to anywhere you want, but then remember where it is for later reference).
  * Download neurophstudio '''2.8''' installer for your platform (for Windows: [[http://sourceforge.net/projects/neuroph/files/neuroph-2.8/neurophstudio-windows-2.8.exe/download | neurophstudio-windows-2.8.exe]]). We have difficulties in getting the latest version to work with Processing, and all the tutorials and documentation are not yet updated for the latest version.
Line 11: Line 10:
  * From C:\Programs\neuroph-2.5b copy neuroph-2.5b.jar to "Processing Sketchbook location"\libraries\neuroph\library. Rename neuroph-2.5b.jar to neuroph.jar.
  * From C:\Programs\neuroph-2.5b\lib copy two jar files found there to "Processing Sketchbook location"\libraries\neuroph\library
.
 * If you are confident enough, you can also try to use Eclipse to program in Java. Then try to follow the instructions from the assignment [[http://http://wiki.id.tue.nl/processing2java|Processing2Java]]. Remember you shall include the aforementioned jar files in the projects if you want to use neuroph.
  * From `<neurophstudio directory>\neurophstudio\modules\ext` copy `neuroph-core-<version>.jar` to `<Processing Sketchbook location>\libraries\neuroph\library`. Rename `neuroph-core-<version>.jar` to `neuroph.jar`.
 * If you are confident enough, you can also try to use Eclipse to program in Java. Then try to follow the instructions from the assignment [[http://wiki.id.tue.nl/processing2java|Processing2Java]]. Remember you shall include the aforementioned jar files in the projects if you want to use neuroph.
Line 16: Line 14:
 * CreaproProcessingLibrary
Line 23: Line 20:
=== Java -> Processing === Try the Perceptron example first with Neuroph Studio:
This is the Perceptron example from http://neuroph.sourceforge.net/tutorials/Perceptron.html:

=== Java code ===
Line 26: Line 26:
package org.neuroph.samples;
Line 27: Line 29:
import org.neuroph.nnet.MultiLayerPerceptron;
import org.neuroph.core.learning.TrainingSet;
import org.neuroph.nnet.Perceptron;
import org.neuroph.core.learning.DataSet;
Line 32: Line 34:
import org.neuroph.util.TransferFunctionType;
Line 35: Line 36:
 * This sample shows how to create, train, save and load simple Multi Layer Perceptron  * This sample shows how to create, train, save and load simple Perceptron neural network
Line 37: Line 38:

void setup() {

    // create training set (logical XOR function)
    TrainingSet trainingSet = new TrainingSet();
    trainingSet.addElement(new SupervisedTrainingElement(new double[] {
public class PerceptronSample {

  public static
void main(String args[]) {

    // create training set (logical AND function)
    DataSet trainingSet = new DataSet(2, 1);
    trainingSet.addRow(new DataSetRow(new double[] {
Line 49: Line 51:
    trainingSet.addElement(new SupervisedTrainingElement(new double[] {     trainingSet.addRow(new DataSetRow(new double[] {
Line 53: Line 55:
      0
    }
    ));
    trainingSet.addRow(new DataSetRow(new double[] {
      1, 0
    }
    , new double[] {
      0
    }
    ));
    trainingSet.addRow(new DataSetRow(new double[] {
      1, 1
    }
    , new double[] {
Line 56: Line 72:
    trainingSet.addElement(new SupervisedTrainingElement(new double[] {
      1, 0
    }
    , new double[] {
      1
    }
    ));
    trainingSet.addElement(new SupervisedTrainingElement(new double[] {
      1, 1
    }
    , new double[] {
      0
    }
    ));

    // create multi layer perceptron
    MultiLayerPerceptron myMlPerceptron = new MultiLayerPerceptron(TransferFunctionType.TANH, 2, 3, 1);

    // create perceptron neural network
    NeuralNetwork myPerceptron = new Perceptron(2, 1);
Line 74: Line 77:
    myMlPerceptron.learnInSameThread(trainingSet);     myPerceptron.learn(trainingSet);
Line 77: Line 80:
    System.out.println("Testing trained neural network");
    testNeuralNetwork(myMlPerceptron, trainingSet);

    // save trained neural network
    myMlPerceptron.save("myMlPerceptron.nnet");
    System.out.println("Testing trained perceptron");
    testNeuralNetwork(myPerceptron, trainingSet);

    // save trained perceptron
    myPerceptron.save("mySamplePerceptron.nnet");
Line 84: Line 87:
    NeuralNetwork loadedMlPerceptron = NeuralNetwork.load("myMlPerceptron.nnet");     NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet");
Line 87: Line 90:
    System.out.println("Testing loaded neural network");
    testNeuralNetwork(loadedMlPerceptron, trainingSet);
    
    noLoop();
  }

void testNeuralNetwork(NeuralNetwork nnet, TrainingSet tset) {
  
    nnet.setInput(new double[]{1, 0});
    nnet.calculate();
    double networkOutput = nnet.getOutput()[0];
    System.out.println(" Output: " + networkOutput);
  }
    System.out.println("Testing loaded perceptron");
    testNeuralNetwork(loadedPerceptron, trainingSet);
  }

  public static void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {

    for (DataSetRow dataRow : tset.getRows()) {

      nnet.setInput(dataRow.getInput());
      nnet.calculate();
      double[ ] networkOutput = nnet.getOutput();
      System.out.print("Input: " + Arrays.toString(dataRow.getInput()) );
      System.out.println(" Output: " + Arrays.toString(networkOutput) );
    }
  }
}
Line 103: Line 109:
=== AdMoVeo XOR === === Processing code ===
Line 106: Line 112:

import org.neuroph.core.NeuralNetwork;
import org.neuroph.nnet.MultiLayerPerceptron;
import processing.serial.*;
import nl.tue.id.creapro.admoveo.*;

AdMoVeo admoveo;
int bgcolor = 0;
int left = 0, right = 0;
int result = 0;
NeuralNetwork nnet;
import org.neuroph.util.plugins.*;
import org.neuroph.core.transfer.*;
import org.neuroph.util.*;
import org.neuroph.nnet.comp.layer.*;
import org.neuroph.nnet.*;
import org.neuroph.core.events.*;
import org.neuroph.core.learning.error.*;
import org.neuroph.core.data.sample.*;
import org.neuroph.util.io.*;
import org.neuroph.core.exceptions.*;
import org.neuroph.core.learning.*;
import org.neuroph.core.input.*;
import org.neuroph.nnet.learning.*;
import org.neuroph.util.benchmark.*;
import org.neuroph.util.random.*;
import org.neuroph.nnet.comp.*;
import org.neuroph.core.learning.stop.*;
import org.neuroph.core.data.*;
import org.neuroph.core.*;
import org.neuroph.nnet.comp.neuron.*;
import org.neuroph.core.data.norm.*;

import java.util.*;

/**
 * This sample shows how to create, train, save and load simple Perceptron neural network
 */
Line 119: Line 140:
  nnet = NeuralNetwork.load("C:/Users/jhu/Documents/NetBeansProjects/XORProject/Neural Networks/NewNeuralNetwork.nnet");
 
  admoveo = new AdMoVeo(this, "COM3");
  admoveo.getLeftDistanceSensor().enable();
  admoveo.getRightDistanceSensor().enable();

  // create training set (logical AND function)
  DataSet trainingSet = new DataSet(2, 1);
  trainingSet.addRow(new DataSetRow(new double[] {
    0, 0
  }
  , new double[] {
    0
  }
  ));
  trainingSet.addRow(new DataSetRow(new double[] {
    0, 1
  }
  , new double[] {
    0
  }
  ));
  trainingSet.addRow(new DataSetRow(new double[] {
    1, 0
  }
  , new double[] {
    0
  }
  ));
  trainingSet.addRow(new DataSetRow(new double[] {
    1, 1
  }
  , new double[] {
    1
  }
  ));

  // create perceptron neural network
  NeuralNetwork myPerceptron = new Perceptron(2, 1);

  // learn the training set
  myPerceptron.learn(trainingSet);

  // test perceptron
  System.out.println("Testing trained perceptron");
  testNeuralNetwork(myPerceptron, trainingSet);

  // save trained perceptron
  myPerceptron.save("mySamplePerceptron.nnet");

  // load saved neural network
  NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet");

  // test loaded neural network
  System.out.println("Testing loaded perceptron");
  testNeuralNetwork(loadedPerceptron, trainingSet);
Line 126: Line 193:
void draw()
{
  background(0,0,bgcolor);
void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {

  for (DataSetRow dataRow : tset.getRows()) {

    nnet.setInput(dataRow.getInput());
    nnet.calculate();
    double[ ] networkOutput = nnet.getOutput();
    System.out.print("Input: " + Arrays.toString(dataRow.getInput()) );
    System.out.println(" Output: " + Arrays.toString(networkOutput) );
  }
Line 131: Line 205:
void inputAvailable(Sensor sensor, int oldValue, int newValue){
    if(sensor == admoveo.getLeftDistanceSensor()){
      println(newValue);
      left = newValue < 900? 1: 0;
    }
    if(sensor == admoveo.getRightDistanceSensor()){
       right = newValue < 900? 1: 0;

    }
    nnet.setInput(new double[] {left, right});
    nnet.calculate();
    int output = nnet.getOutput()[0]>.5?1:0;
    //println(""+ left + " " + right + " " + output);
    
    if(output!=result){
      bgcolor = output *255;
      admoveo.getBlueLed().setPower(bgcolor);
      result = output;
    }
}

Line 155: Line 207:
=== A trained XOR multilayer perceptron network ==
{{attachment:MultiLayerPerceptron.nnet}}


=== A trained XOR multilayer perceptron network ===
[[attachment:MultiLayerPerceptron.nnet]]

Preparation

  • Follow the instructions from the assignment Creative Programming to install Processing and if needed, Arduino software environment.

  • Install Neuroph, a lightweight Java neural network framework.

    • Download neurophstudio 2.8 installer for your platform (for Windows: neurophstudio-windows-2.8.exe). We have difficulties in getting the latest version to work with Processing, and all the tutorials and documentation are not yet updated for the latest version.

    • In "Processing Sketchbook location"\libraries, create a sub-directory "neuroph".
    • In "Processing Sketchbook location"\libraries\neuroph, create a sub-directory "library".
    • From <neurophstudio directory>\neurophstudio\modules\ext copy neuroph-core-<version>.jar to <Processing Sketchbook location>\libraries\neuroph\library. Rename neuroph-core-<version>.jar to neuroph.jar.

  • If you are confident enough, you can also try to use Eclipse to program in Java. Then try to follow the instructions from the assignment Processing2Java. Remember you shall include the aforementioned jar files in the projects if you want to use neuroph.

References

Examples

Try the Perceptron example first with Neuroph Studio: This is the Perceptron example from http://neuroph.sourceforge.net/tutorials/Perceptron.html:

Java code

   1 package org.neuroph.samples;
   2 
   3 import org.neuroph.core.NeuralNetwork;
   4 import org.neuroph.nnet.Perceptron;
   5 import org.neuroph.core.learning.DataSet;
   6 import org.neuroph.core.learning.TrainingElement;
   7 import org.neuroph.core.learning.SupervisedTrainingElement;
   8 import java.util.Vector;
   9 
  10 /**
  11  * This sample shows how to create, train, save and load simple Perceptron neural network 
  12  */
  13 public class PerceptronSample {
  14 
  15   public static void main(String args[]) {
  16 
  17     // create training set (logical AND function)
  18     DataSet trainingSet = new DataSet(2, 1);
  19     trainingSet.addRow(new DataSetRow(new double[] {
  20       0, 0
  21     }
  22     , new double[] {
  23       0
  24     }
  25     ));
  26     trainingSet.addRow(new DataSetRow(new double[] {
  27       0, 1
  28     }
  29     , new double[] {
  30       0
  31     }
  32     ));
  33     trainingSet.addRow(new DataSetRow(new double[] {
  34       1, 0
  35     }
  36     , new double[] {
  37       0
  38     }
  39     ));
  40     trainingSet.addRow(new DataSetRow(new double[] {
  41       1, 1
  42     }
  43     , new double[] {
  44       1
  45     }
  46     ));
  47 
  48     // create perceptron neural network
  49     NeuralNetwork myPerceptron = new Perceptron(2, 1);
  50 
  51     // learn the training set
  52     myPerceptron.learn(trainingSet);
  53 
  54     // test perceptron
  55     System.out.println("Testing trained perceptron");
  56     testNeuralNetwork(myPerceptron, trainingSet);
  57 
  58     // save trained perceptron
  59     myPerceptron.save("mySamplePerceptron.nnet");
  60 
  61     // load saved neural network
  62     NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet");
  63 
  64     // test loaded neural network
  65     System.out.println("Testing loaded perceptron");
  66     testNeuralNetwork(loadedPerceptron, trainingSet);
  67   }
  68 
  69   public static void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {
  70 
  71     for (DataSetRow dataRow : tset.getRows()) {
  72 
  73       nnet.setInput(dataRow.getInput());
  74       nnet.calculate();
  75       double[ ] networkOutput = nnet.getOutput();
  76       System.out.print("Input: " + Arrays.toString(dataRow.getInput()) );
  77       System.out.println(" Output: " + Arrays.toString(networkOutput) );
  78     }
  79   }
  80 }

Processing code

   1 import org.neuroph.util.plugins.*;
   2 import org.neuroph.core.transfer.*;
   3 import org.neuroph.util.*;
   4 import org.neuroph.nnet.comp.layer.*;
   5 import org.neuroph.nnet.*;
   6 import org.neuroph.core.events.*;
   7 import org.neuroph.core.learning.error.*;
   8 import org.neuroph.core.data.sample.*;
   9 import org.neuroph.util.io.*;
  10 import org.neuroph.core.exceptions.*;
  11 import org.neuroph.core.learning.*;
  12 import org.neuroph.core.input.*;
  13 import org.neuroph.nnet.learning.*;
  14 import org.neuroph.util.benchmark.*;
  15 import org.neuroph.util.random.*;
  16 import org.neuroph.nnet.comp.*;
  17 import org.neuroph.core.learning.stop.*;
  18 import org.neuroph.core.data.*;
  19 import org.neuroph.core.*;
  20 import org.neuroph.nnet.comp.neuron.*;
  21 import org.neuroph.core.data.norm.*;
  22 
  23 import java.util.*;
  24 
  25 /**
  26  * This sample shows how to create, train, save and load simple Perceptron neural network 
  27  */
  28 void setup() {
  29 
  30   // create training set (logical AND function)
  31   DataSet trainingSet = new DataSet(2, 1);
  32   trainingSet.addRow(new DataSetRow(new double[] {
  33     0, 0
  34   }
  35   , new double[] {
  36     0
  37   }
  38   ));
  39   trainingSet.addRow(new DataSetRow(new double[] {
  40     0, 1
  41   }
  42   , new double[] {
  43     0
  44   }
  45   ));
  46   trainingSet.addRow(new DataSetRow(new double[] {
  47     1, 0
  48   }
  49   , new double[] {
  50     0
  51   }
  52   ));
  53   trainingSet.addRow(new DataSetRow(new double[] {
  54     1, 1
  55   }
  56   , new double[] {
  57     1
  58   }
  59   ));
  60 
  61   // create perceptron neural network
  62   NeuralNetwork myPerceptron = new Perceptron(2, 1);
  63 
  64   // learn the training set
  65   myPerceptron.learn(trainingSet);
  66 
  67   // test perceptron
  68   System.out.println("Testing trained perceptron");
  69   testNeuralNetwork(myPerceptron, trainingSet);
  70 
  71   // save trained perceptron
  72   myPerceptron.save("mySamplePerceptron.nnet");
  73 
  74   // load saved neural network
  75   NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet");
  76 
  77   // test loaded neural network
  78   System.out.println("Testing loaded perceptron");
  79   testNeuralNetwork(loadedPerceptron, trainingSet);
  80 }
  81 
  82 void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {
  83 
  84   for (DataSetRow dataRow : tset.getRows()) {
  85 
  86     nnet.setInput(dataRow.getInput());
  87     nnet.calculate();
  88     double[ ] networkOutput = nnet.getOutput();
  89     System.out.print("Input: " + Arrays.toString(dataRow.getInput()) );
  90     System.out.println(" Output: " + Arrays.toString(networkOutput) );
  91   }
  92 }

A trained XOR multilayer perceptron network

MultiLayerPerceptron.nnet

JunHu: NeurophNeuralNetwork (last edited 2016-12-12 20:50:49 by JunHu)