<> == Preparation == * Follow the instructions from the assignment [[http://wiki.id.tue.nl/creapro|Creative Programming]] to install Processing and if needed, Arduino software environment. * Install [[http://neuroph.sourceforge.net/|Neuroph]], a lightweight Java neural network framework. * 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. * In "Processing Sketchbook location"\libraries, create a sub-directory "neuroph". * In "Processing Sketchbook location"\libraries\neuroph, create a sub-directory "library". * From `\neurophstudio\modules\ext` copy `neuroph-core-.jar` to `\libraries\neuroph\library`. Rename `neuroph-core-.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. == References == * [[http://neuroph.sourceforge.net/documentation.html|Neuroph Documentation]] * [[http://wiki.id.tue.nl/creapro|Assignment Creative Programming]] * [[http://wiki.id.tue.nl/processing2java|Assignment Processing to java]] * [[MaxJavaArduino | Workshop on how to interface Max/msp, Java, a neural network engine and Arduino]] == Examples == Try the Perceptron example first with Neuroph Studio: This is the Perceptron example from http://neuroph.sourceforge.net/tutorials/Perceptron.html: === Java code === {{{ #!java package org.neuroph.samples; import org.neuroph.core.NeuralNetwork; import org.neuroph.nnet.Perceptron; import org.neuroph.core.learning.DataSet; import org.neuroph.core.learning.TrainingElement; import org.neuroph.core.learning.SupervisedTrainingElement; import java.util.Vector; /** * This sample shows how to create, train, save and load simple Perceptron neural network */ 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[] { 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); } 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) ); } } } }}} === Processing code === {{{ #!java 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 */ void setup() { // 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); } 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) ); } } }}} === A trained XOR multilayer perceptron network === [[attachment:MultiLayerPerceptron.nnet]]