6587
Comment:
|
6402
|
Deletions are marked like this. | Additions are marked like this. |
Line 6: | Line 6: |
* Follow the instructions from the assignment [[http://wiki.id.tue.nl/creapro|Creative Programming]] to prepare the software environment, including Processing and Arduino. If you are not planning to use the GUI components from the Control``P5 library, you can skip the Control``P5 part. * Install [[http://neuroph.sourceforge.net/|Neuroph]], a lightweight Java neural network framework. * Download proper neurophstudio installer for your platform. I will use Windows platform as examples here |
* 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. You might have to install the latest [[http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html|JDK]] first. * Download neurophstudio installer for your platform. |
Line 11: | Line 11: |
* 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. |
* From `<neurophstudio directory>\neurophstudio\modules\ext` copy `neuroph-core-2.8.jar` to `<Processing Sketchbook location>\libraries\neuroph\library`. Rename `neuroph-core-2.8.jar` to `neuroph.jar`. |
Line 15: | Line 14: |
* [[http://neuroph.sourceforge.net/documentation.html|Neuroph Documentation]] | * In NeurophStudio, Help | Help Contents. |
Line 18: | Line 17: |
* [[MaxJavaArduino | Workshop on how to interface Max/msp, Java, a neural network engine and Arduino]] | |
Line 21: | Line 19: |
Try the Perceptron example first with Neuroph Studio: This is the Perceptron example from http://neuroph.sourceforge.net/tutorials/Perceptron.html: |
Try the Perceptron example first with Neuroph Studio. The Perceptron example: Help | Help Contents | Neuroph Studio | Creating and Training NNets | Perceptron If you have difficulties with the terminology, read https://en.wikibooks.org/wiki/Artificial_Neural_Networks/Neural_Network_Basics. About Learning rate and momentum: https://www.quora.com/What-is-the-difference-between-momentum-and-learning-rate |
Line 25: | Line 28: |
{{{ #!java package org.neuroph.samples; |
{{{#!java import java.util.Arrays; |
Line 31: | Line 32: |
import org.neuroph.core.learning.DataSet; import org.neuroph.core.learning.TrainingElement; import org.neuroph.core.learning.SupervisedTrainingElement; import java.util.Vector; |
import org.neuroph.core.data.DataSet; import org.neuroph.core.data.DataSetRow; |
Line 37: | Line 36: |
* This sample shows how to create, train, save and load simple Perceptron neural network | * This sample shows how to create, train, save and load simple Perceptron * neural network |
Line 41: | Line 41: |
public static void main(String args[]) { | public static void main(String args[]) { |
Line 43: | Line 43: |
// 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 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 })); |
Line 74: | Line 50: |
// create perceptron neural network NeuralNetwork myPerceptron = new Perceptron(2, 1); |
// create perceptron neural network NeuralNetwork myPerceptron = new Perceptron(2, 1); |
Line 77: | Line 53: |
// learn the training set myPerceptron.learn(trainingSet); |
// learn the training set myPerceptron.learn(trainingSet); |
Line 80: | Line 56: |
// test perceptron System.out.println("Testing trained perceptron"); testNeuralNetwork(myPerceptron, trainingSet); |
// test perceptron System.out.println("Testing trained perceptron"); testNeuralNetwork(myPerceptron, trainingSet); |
Line 84: | Line 60: |
// save trained perceptron myPerceptron.save("mySamplePerceptron.nnet"); |
// save trained perceptron myPerceptron.save("mySamplePerceptron.nnet"); |
Line 87: | Line 63: |
// load saved neural network NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet"); |
// load saved neural network NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet"); |
Line 90: | Line 66: |
// test loaded neural network System.out.println("Testing loaded perceptron"); testNeuralNetwork(loadedPerceptron, trainingSet); } |
// test loaded neural network System.out.println("Testing loaded perceptron"); testNeuralNetwork(loadedPerceptron, trainingSet); } |
Line 95: | Line 71: |
public static void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) { | public static void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) { |
Line 97: | Line 73: |
for (DataSetRow dataRow : tset.getRows()) { | for (DataSetRow dataRow : tset.getRows()) { |
Line 99: | Line 75: |
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) ); } } |
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 107: | Line 83: |
}}} === Processing code === . /!\ Notice the use of the sketchPath() function for saving the data file next to your Processing sketch. |
|
Line 108: | Line 87: |
}}} === Processing code === {{{ #!java import org.neuroph.util.plugins.*; |
{{{#!java import org.neuroph.core.*; import org.neuroph.core.data.*; import org.neuroph.core.data.norm.*; import org.neuroph.core.data.sample.*; import org.neuroph.core.events.*; import org.neuroph.core.exceptions.*; import org.neuroph.core.input.*; import org.neuroph.core.learning.error.*; import org.neuroph.core.learning.*; import org.neuroph.core.learning.stop.*; |
Line 115: | Line 99: |
import org.neuroph.util.*; | import org.neuroph.nnet.*; import org.neuroph.nnet.comp.*; |
Line 117: | Line 102: |
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.comp.neuron.*; |
Line 127: | Line 105: |
import org.neuroph.util.*; import org.neuroph.util.io.*; import org.neuroph.util.plugins.*; |
|
Line 128: | Line 109: |
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.*; |
|
Line 138: | Line 113: |
* This sample shows how to create, train, save and load simple Perceptron neural network | * This sample shows how to create, train, save and load simple Perceptron neural network |
Line 144: | Line 119: |
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 } )); |
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 })); |
Line 180: | Line 131: |
System.out.println("Testing trained perceptron"); | println("Testing trained perceptron"); |
Line 183: | Line 134: |
println(dataPath("")); |
|
Line 184: | Line 137: |
myPerceptron.save("mySamplePerceptron.nnet"); | myPerceptron.save(sketchPath("mySamplePerceptron.nnet")); |
Line 187: | Line 140: |
NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet"); | NeuralNetwork loadedPerceptron = NeuralNetwork.load(sketchPath("mySamplePerceptron.nnet")); |
Line 190: | Line 143: |
System.out.println("Testing loaded perceptron"); | println("Testing loaded perceptron"); |
Line 201: | Line 154: |
System.out.print("Input: " + Arrays.toString(dataRow.getInput()) ); System.out.println(" Output: " + Arrays.toString(networkOutput) ); |
print("Input: " + Arrays.toString(dataRow.getInput()) ); println(" Output: " + Arrays.toString(networkOutput) ); |
Line 205: | Line 158: |
Line 207: | Line 159: |
=== 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. You might have to install the latest JDK first.
- Download neurophstudio installer for your platform.
- 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-2.8.jar to <Processing Sketchbook location>\libraries\neuroph\library. Rename neuroph-core-2.8.jar to neuroph.jar.
References
In NeurophStudio, Help | Help Contents.
Examples
Try the Perceptron example first with Neuroph Studio.
The Perceptron example: Help | Help Contents | Neuroph Studio | Creating and Training NNets | Perceptron
If you have difficulties with the terminology, read https://en.wikibooks.org/wiki/Artificial_Neural_Networks/Neural_Network_Basics.
About Learning rate and momentum: https://www.quora.com/What-is-the-difference-between-momentum-and-learning-rate
Java code
1 import java.util.Arrays;
2 import org.neuroph.core.NeuralNetwork;
3 import org.neuroph.nnet.Perceptron;
4 import org.neuroph.core.data.DataSet;
5 import org.neuroph.core.data.DataSetRow;
6
7 /**
8 * This sample shows how to create, train, save and load simple Perceptron
9 * neural network
10 */
11 public class PerceptronSample {
12
13 public static void main(String args[]) {
14
15 // create training set (logical AND function)
16 DataSet trainingSet = new DataSet(2, 1);
17 trainingSet.addRow(new DataSetRow(new double[] { 0, 0 }, new double[] { 0 }));
18 trainingSet.addRow(new DataSetRow(new double[] { 0, 1 }, new double[] { 0 }));
19 trainingSet.addRow(new DataSetRow(new double[] { 1, 0 }, new double[] { 0 }));
20 trainingSet.addRow(new DataSetRow(new double[] { 1, 1 }, new double[] { 1 }));
21
22 // create perceptron neural network
23 NeuralNetwork myPerceptron = new Perceptron(2, 1);
24
25 // learn the training set
26 myPerceptron.learn(trainingSet);
27
28 // test perceptron
29 System.out.println("Testing trained perceptron");
30 testNeuralNetwork(myPerceptron, trainingSet);
31
32 // save trained perceptron
33 myPerceptron.save("mySamplePerceptron.nnet");
34
35 // load saved neural network
36 NeuralNetwork loadedPerceptron = NeuralNetwork.load("mySamplePerceptron.nnet");
37
38 // test loaded neural network
39 System.out.println("Testing loaded perceptron");
40 testNeuralNetwork(loadedPerceptron, trainingSet);
41 }
42
43 public static void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {
44
45 for (DataSetRow dataRow : tset.getRows()) {
46
47 nnet.setInput(dataRow.getInput());
48 nnet.calculate();
49 double[] networkOutput = nnet.getOutput();
50 System.out.print("Input: " + Arrays.toString(dataRow.getInput()));
51 System.out.println(" Output: " + Arrays.toString(networkOutput));
52 }
53 }
54 }
Processing code
Notice the use of the sketchPath() function for saving the data file next to your Processing sketch.
1 import org.neuroph.core.*;
2 import org.neuroph.core.data.*;
3 import org.neuroph.core.data.norm.*;
4 import org.neuroph.core.data.sample.*;
5 import org.neuroph.core.events.*;
6 import org.neuroph.core.exceptions.*;
7 import org.neuroph.core.input.*;
8 import org.neuroph.core.learning.error.*;
9 import org.neuroph.core.learning.*;
10 import org.neuroph.core.learning.stop.*;
11 import org.neuroph.core.transfer.*;
12 import org.neuroph.nnet.*;
13 import org.neuroph.nnet.comp.*;
14 import org.neuroph.nnet.comp.layer.*;
15 import org.neuroph.nnet.comp.neuron.*;
16 import org.neuroph.nnet.learning.*;
17 import org.neuroph.util.benchmark.*;
18 import org.neuroph.util.*;
19 import org.neuroph.util.io.*;
20 import org.neuroph.util.plugins.*;
21 import org.neuroph.util.random.*;
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[] { 0, 0 }, new double[] { 0 }));
33 trainingSet.addRow(new DataSetRow(new double[] { 0, 1 }, new double[] { 0 }));
34 trainingSet.addRow(new DataSetRow(new double[] { 1, 0 }, new double[] { 0 }));
35 trainingSet.addRow(new DataSetRow(new double[] { 1, 1 }, new double[] { 1 }));
36
37 // create perceptron neural network
38 NeuralNetwork myPerceptron = new Perceptron(2, 1);
39
40 // learn the training set
41 myPerceptron.learn(trainingSet);
42
43 // test perceptron
44 println("Testing trained perceptron");
45 testNeuralNetwork(myPerceptron, trainingSet);
46
47 println(dataPath(""));
48
49 // save trained perceptron
50 myPerceptron.save(sketchPath("mySamplePerceptron.nnet"));
51
52 // load saved neural network
53 NeuralNetwork loadedPerceptron = NeuralNetwork.load(sketchPath("mySamplePerceptron.nnet"));
54
55 // test loaded neural network
56 println("Testing loaded perceptron");
57 testNeuralNetwork(loadedPerceptron, trainingSet);
58 }
59
60 void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {
61
62 for (DataSetRow dataRow : tset.getRows()) {
63
64 nnet.setInput(dataRow.getInput());
65 nnet.calculate();
66 double[ ] networkOutput = nnet.getOutput();
67 print("Input: " + Arrays.toString(dataRow.getInput()) );
68 println(" Output: " + Arrays.toString(networkOutput) );
69 }
70 }