Differences between revisions 24 and 25
Revision 24 as of 2014-02-19 22:22:24
Size: 5211
Editor: JunHu
Comment:
Revision 25 as of 2014-02-19 22:23:32
Size: 5209
Editor: JunHu
Comment:
Deletions are marked like this. Additions are marked like this.
Line 101: Line 101:
{{{#! /*
Line 154: Line 155:
}}} */

Preparation

  • Follow the instructions from the assignment Creative Programming to prepare the software environment, including Processing and Arduino. If you are not planning to use the GUI components from the ControlP5 library, you can skip the ControlP5 part.

  • Install Neuroph, a lightweight Java neural network framework.

    • Download proper neurophstudio installer for your platform. I will use Windows platform as examples here
    • In "Processing Sketchbook location"\libraries, create a sub-directory "neuroph".
    • In "Processing Sketchbook location"\libraries\neuroph, create a sub-directory "library".
    • From C:\Programs\<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

Java -> Processing

   1 import org.neuroph.core.NeuralNetwork;
   2 import org.neuroph.nnet.MultiLayerPerceptron;
   3 import org.neuroph.core.learning.TrainingSet;
   4 import org.neuroph.core.learning.TrainingElement;
   5 import org.neuroph.core.learning.SupervisedTrainingElement;
   6 import java.util.Vector;
   7 import org.neuroph.util.TransferFunctionType;
   8 
   9 /**
  10  * This sample shows how to create, train, save and load simple Multi Layer Perceptron
  11  */
  12 
  13 void setup() {
  14 
  15     // create training set (logical XOR function)
  16     TrainingSet trainingSet = new TrainingSet();
  17     trainingSet.addElement(new SupervisedTrainingElement(new double[] {
  18       0, 0
  19     }
  20     , new double[] {
  21       0
  22     }
  23     ));
  24     trainingSet.addElement(new SupervisedTrainingElement(new double[] {
  25       0, 1
  26     }
  27     , new double[] {
  28       1
  29     }
  30     ));
  31     trainingSet.addElement(new SupervisedTrainingElement(new double[] {
  32       1, 0
  33     }
  34     , new double[] {
  35       1
  36     }
  37     ));
  38     trainingSet.addElement(new SupervisedTrainingElement(new double[] {
  39       1, 1
  40     }
  41     , new double[] {
  42       0
  43     }
  44     ));
  45 
  46     // create multi layer perceptron
  47     MultiLayerPerceptron myMlPerceptron = new MultiLayerPerceptron(TransferFunctionType.TANH, 2, 3, 1);
  48     // learn the training set
  49     myMlPerceptron.learnInSameThread(trainingSet);
  50 
  51     // test perceptron
  52     System.out.println("Testing trained neural network");
  53     testNeuralNetwork(myMlPerceptron, trainingSet);
  54 
  55     // save trained neural network
  56     myMlPerceptron.save("myMlPerceptron.nnet");
  57 
  58     // load saved neural network
  59     NeuralNetwork loadedMlPerceptron = NeuralNetwork.load("myMlPerceptron.nnet");
  60 
  61     // test loaded neural network
  62     System.out.println("Testing loaded neural network");
  63     testNeuralNetwork(loadedMlPerceptron, trainingSet);
  64     
  65     noLoop();
  66   }
  67 
  68 void testNeuralNetwork(NeuralNetwork nnet, TrainingSet tset) {
  69   
  70     nnet.setInput(new double[]{1, 0});
  71     nnet.calculate();
  72     double networkOutput = nnet.getOutput()[0];
  73     System.out.println(" Output: " + networkOutput);
  74   }

AdMoVeo XOR

   1 import org.neuroph.core.NeuralNetwork;
   2 import org.neuroph.nnet.MultiLayerPerceptron;
   3 import processing.serial.*;
   4 import nl.tue.id.creapro.admoveo.*;
   5 
   6 AdMoVeo admoveo;
   7 int bgcolor = 0;
   8 int left = 0, right = 0;
   9 int result = 0;
  10 NeuralNetwork nnet;  
  11 
  12 void setup() {
  13   nnet = NeuralNetwork.load("C:/Users/jhu/Documents/NetBeansProjects/XORProject/Neural Networks/NewNeuralNetwork.nnet");
  14  
  15   admoveo = new AdMoVeo(this, "COM3"); 
  16   admoveo.getLeftDistanceSensor().enable();
  17   admoveo.getRightDistanceSensor().enable();
  18 }
  19 
  20 void draw()
  21 {
  22   background(0,0,bgcolor);
  23 }
  24 
  25 void inputAvailable(Sensor sensor, int oldValue, int newValue){  
  26     if(sensor == admoveo.getLeftDistanceSensor()){
  27       println(newValue);
  28       left = newValue < 900? 1: 0;
  29     }
  30     if(sensor == admoveo.getRightDistanceSensor()){
  31        right = newValue < 900? 1: 0;
  32 
  33     }
  34     nnet.setInput(new double[] {left, right});
  35     nnet.calculate();
  36     int output = nnet.getOutput()[0]>.5?1:0;
  37     //println(""+ left + " " + right +  " " + output);
  38     
  39     if(output!=result){
  40       bgcolor = output *255;
  41       admoveo.getBlueLed().setPower(bgcolor);
  42       result = output;
  43     }
  44 }

*/

A trained XOR multilayer perceptron network

MultiLayerPerceptron.nnet

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