1
/**/
/*
2
* JOONE - Java Object Oriented Neural Engine
3
* http://joone.sourceforge.net
4
*
5
* XOR_using_NeuralNet.java
6
*
7
*/
8
package
study;
9![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
10
import
org.joone.engine.
*
;
11
import
org.joone.engine.learning.
*
;
12
import
org.joone.io.
*
;
13
import
org.joone.net.
*
;
14
import
java.util.Vector;
15![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
16![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public
class
XOR_using_NeuralNet
implements
NeuralNetListener
{
17
private NeuralNet nnet = null ;
18
private MemoryInputSynapse inputSynapse, desiredOutputSynapse;
19
private MemoryOutputSynapse outputSynapse;
20
LinearLayer input;
21
SigmoidLayer hidden, output;
22
boolean singleThreadMode = true ;
23
24
// XOR input
25![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private double [][] inputArray = new double [][]
{
26![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 0.0 , 0.0 } ,
27![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 0.0 , 1.0 } ,
28![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 1.0 , 0.0 } ,
29![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 1.0 , 1.0 }
30
} ;
31
32
// XOR desired output
33![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private double [][] desiredOutputArray = new double [][]
{
34![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 0.0 } ,
35![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 1.0 } ,
36![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 1.0 } ,
37![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 0.0 }
38
} ;
39
40![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** */ /**
41
* @param args the command line arguments
42
*/
43![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String args[])
{
44
XOR_using_NeuralNet xor = new XOR_using_NeuralNet();
45
46
xor.initNeuralNet();
47
xor.train();
48
xor.interrogate();
49
}
50
51![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** */ /**
52
* Method declaration
53
*/
54![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void train()
{
55
56
// set the inputs
57
inputSynapse.setInputArray(inputArray);
58
inputSynapse.setAdvancedColumnSelector( " 1,2 " );
59
// set the desired outputs
60
desiredOutputSynapse.setInputArray(desiredOutputArray);
61
desiredOutputSynapse.setAdvancedColumnSelector( " 1 " );
62
63
// get the monitor object to train or feed forward
64
Monitor monitor = nnet.getMonitor();
65
66
// set the monitor parameters
67
monitor.setLearningRate( 0.8 );
68
monitor.setMomentum( 0.3 );
69
monitor.setTrainingPatterns(inputArray.length);
70
monitor.setTotCicles( 5000 );
71
monitor.setLearning( true );
72
73
long initms = System.currentTimeMillis();
74
// Run the network in single-thread, synchronized mode
75
nnet.getMonitor().setSingleThreadMode(singleThreadMode);
76
nnet.go( true );
77
System.out.println( " Total time= " + (System.currentTimeMillis() - initms) + " ms " );
78
}
79
80![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private void interrogate()
{
81
// set the inputs
82
inputSynapse.setInputArray(inputArray);
83
inputSynapse.setAdvancedColumnSelector( " 1,2 " );
84
Monitor monitor = nnet.getMonitor();
85
monitor.setTrainingPatterns( 4 );
86
monitor.setTotCicles( 1 );
87
monitor.setLearning( false );
88
MemoryOutputSynapse memOut = new MemoryOutputSynapse();
89
// set the output synapse to write the output of the net
90
91![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (nnet != null )
{
92
nnet.addOutputSynapse(memOut);
93
System.out.println(nnet.check());
94
nnet.getMonitor().setSingleThreadMode(singleThreadMode);
95
nnet.go();
96
97![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for ( int i = 0 ; i < 4 ; i ++ )
{
98
double [] pattern = memOut.getNextPattern();
99
System.out.println( " Output pattern # " + (i + 1 ) + " = " + pattern[ 0 ]);
100
}
101
System.out.println( " Interrogating Finished " );
102
}
103
}
104
105![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** */ /**
106
* Method declaration
107
*/
108![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
protected void initNeuralNet()
{
109
110
// First create the three layers
111
input = new LinearLayer();
112
hidden = new SigmoidLayer();
113
output = new SigmoidLayer();
114
115
// set the dimensions of the layers
116
input.setRows( 2 );
117
hidden.setRows( 3 );
118
output.setRows( 1 );
119
120
input.setLayerName( " L.input " );
121
hidden.setLayerName(
![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
2
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
3
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
4
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
5
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
6
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
7
![ExpandedBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
9
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
10
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
11
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
12
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
13
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
14
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
15
![None.gif](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
16
![ExpandedBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
17
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
18
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
19
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
20
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
21
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
22
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
23
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
24
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
25
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
26
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
27
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
28
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
29
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
30
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
31
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
32
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
33
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
34
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
35
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
36
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
37
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
38
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
40
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
41
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
42
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
44
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
45
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
46
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
47
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
48
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
49
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
51
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
52
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
53
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
55
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
56
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
57
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
58
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
59
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
60
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
61
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
62
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
63
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
64
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
65
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
66
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
67
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
68
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
69
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
70
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
71
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
72
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
73
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
74
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
75
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
76
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
77
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
78
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
79
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
80
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
81
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
82
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
83
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
84
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
85
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
86
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
87
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
88
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
89
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
90
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
91
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
92
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
93
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
94
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
95
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
96
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
97
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
98
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
99
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
100
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
101
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
102
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
104
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
105
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
106
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
107
![ExpandedSubBlockEnd.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
108
![ExpandedSubBlockStart.gif](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](http://www.blogjava.net/Images/dot.gif)
109
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
110
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
111
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
112
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
113
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
114
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
115
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
116
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
117
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
118
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
119
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
120
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
121
![InBlock.gif](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)