Java Adaptive Linear Neuron (ADALINE)
The ADALINE neural network was developed by professor Bernard Widrow and his graduate student Ted Hoff. It is a very simple neural network usually used for pattern recognition. ADALINE is short for Adaptive Linear Neuron or Adaptive Linear Element. It is considered a single layer neural network. Though an activation function forms a sort of primitive output layer. Weighted connections are made to this activation function. A threshold, or bias, is also provided for. The output from an ADALINE neural network is usually bipolar.
The ADALINE network modeled in the Encog Workbench looks like this:
The above diagram produces the following Java code.
BasicNetwork network = new BasicNetwork();
Layer inputLayer = new BasicLayer( new ActivationLinear(),false,5);
inputLayer.addNext(inputLayer);
Layer outputLayer = new BasicLayer( new ActivationLinear(),true,1);
inputLayer.addNext(outputLayer);
network.tagLayer("INPUT",inputLayer);
network.tagLayer("OUTPUT",outputLayer);
network.getStructure().finalizeStructure();
network.reset();
Usually you will just use a pattern to create a common neural network, such as an ADALINE network in Encog. This saves you having to code each connection, like the above code does. The following example uses a pattern to create an ADALINE neural network that can recognize digits.
package org.encog.examples.neural.adaline;
import org.encog.neural.activation.ActivationBiPolar;
import org.encog.neural.activation.ActivationLinear;
import org.encog.neural.data.NeuralData;
import org.encog.neural.data.NeuralDataSet;
import org.encog.neural.data.basic.BasicNeuralData;
import org.encog.neural.data.basic.BasicNeuralDataSet;
import org.encog.neural.networks.BasicNetwork;
import org.encog.neural.networks.layers.BasicLayer;
import org.encog.neural.networks.layers.Layer;
import org.encog.neural.networks.training.Train;
import org.encog.neural.networks.training.simple.TrainAdaline;
import org.encog.util.randomize.RangeRandomizer;
public class AdalineDigits {
public final static int CHAR_WIDTH = 5;
public final static int CHAR_HEIGHT = 7;
public static String[][] DIGITS = {
{ " OOO ",
"O O",
"O O",
"O O",
"O O",
"O O",
" OOO " },
{ " O ",
" OO ",
"O O ",
" O ",
" O ",
" O ",
" O " },
{ " OOO ",
"O O",
" O",
" O ",
" O ",
" O ",
"OOOOO" },
{ " OOO ",
"O O",
" O",
" OOO ",
" O",
"O O",
" OOO " },
{ " O ",
" OO ",
" O O ",
"O O ",
"OOOOO",
" O ",
" O " },
{ "OOOOO",
"O ",
"O ",
"OOOO ",
" O",
"O O",
" OOO " },
{ " OOO ",
"O O",
"O ",
"OOOO ",
"O O",
"O O",
" OOO " },
{ "OOOOO",
" O",
" O",
" O ",
" O ",
" O ",
"O " },
{ " OOO ",
"O O",
"O O",
" OOO ",
"O O",
"O O",
" OOO " },
{ " OOO ",
"O O",
"O O",
" OOOO",
" O",
"O O",
" OOO " } };
public static NeuralDataSet generateTraining()
{
NeuralDataSet result = new BasicNeuralDataSet();
for(int i=0;i 0.01);
//
System.out.println("Error:" + network.calculateError(training));
// test it
for(int i=0;i "+output);
else
System.out.println(DIGITS[i][j]);
}
System.out.println();
}
}
}
When run, this program produces the following output.
Epoch #1 Error:0.49019976350873823
Epoch #2 Error:0.33184526864330893
Epoch #3 Error:0.2648569878027761
Epoch #4 Error:0.22394663708060208
Epoch #5 Error:0.1969743898052336
Epoch #6 Error:0.1777392521261772
Epoch #7 Error:0.16310249900844181
Epoch #8 Error:0.15141780468563223
Epoch #9 Error:0.14176141491965236
Epoch #10 Error:0.1335750865062877
Epoch #11 Error:0.1264976940996118
Epoch #12 Error:0.12028213299354028
Epoch #13 Error:0.1147518251232064
Epoch #14 Error:0.10977642256510217
Epoch #15 Error:0.1052573256216797
Epoch #16 Error:0.10111852874143416
Epoch #17 Error:0.09730054418906431
Epoch #18 Error:0.09375621108207914
Epoch #19 Error:0.09044771920335207
Epoch #20 Error:0.08734444780518938
Epoch #21 Error:0.08442136839943402
Epoch #22 Error:0.08165784714382346
Epoch #23 Error:0.07903673560575533
Epoch #24 Error:0.07654367279283213
Epoch #25 Error:0.07416654397543367
Epoch #26 Error:0.07189505723343086
Epoch #27 Error:0.06972040934555132
Epoch #28 Error:0.06763502016207
Epoch #29 Error:0.06563231996190791
Epoch #30 Error:0.06370657815757488
Epoch #31 Error:0.06185276452366755
Epoch #32 Error:0.06006643619340187
Epoch #33 Error:0.05834364520495924
Epoch #34 Error:0.05668086253318751
Epoch #35 Error:0.05507491541652166
Epoch #36 Error:0.05352293545769456
Epoch #37 Error:0.05202231549274202
Epoch #38 Error:0.050570673624098866
Epoch #39 Error:0.049165823128048416
Epoch #40 Error:0.04780574719487715
Epoch #41 Error:0.04648857765701261
Epoch #42 Error:0.04521257701758946
Epoch #43 Error:0.04397612321794037
Epoch #44 Error:0.04277769668404586
Epoch #45 Error:0.041615869274089175
Epoch #46 Error:0.040489294815897775
Epoch #47 Error:0.03939670097730096
Epoch #48 Error:0.03833688225672541
Epoch #49 Error:0.037308693917607674
Epoch #50 Error:0.03631104671995803
Epoch #51 Error:0.03534290232688406
Epoch #52 Error:0.03440326928405701
Epoch #53 Error:0.03349119948676987
Epoch #54 Error:0.03260578506302794
Epoch #55 Error:0.031746155612554464
Epoch #56 Error:0.030911475751097164
Epoch #57 Error:0.030100942917335376
Epoch #58 Error:0.029313785406287336
Epoch #59 Error:0.028549260598632036
Epoch #60 Error:0.02780665335997772
Epoch #61 Error:0.027085274587982287
Epoch #62 Error:0.02638445988848496
Epoch #63 Error:0.025703568364551177
Epoch #64 Error:0.025041981504642638
Epoch #65 Error:0.024399102158081117
Epoch #66 Error:0.023774353587628506
Epoch #67 Error:0.023167178590411827
Epoch #68 Error:0.022577038679615115
Epoch #69 Error:0.022003413320378713
Epoch #70 Error:0.021445799214214627
Epoch #71 Error:0.02090370962699023
Epoch #72 Error:0.020376673756168157
Epoch #73 Error:0.019864236133538174
Epoch #74 Error:0.019365956060145444
Epoch #75 Error:0.018881407070526143
Epoch #76 Error:0.018410176423709408
Epoch #77 Error:0.017951864618748727
Epoch #78 Error:0.01750608493280599
Epoch #79 Error:0.017072462980040122
Epoch #80 Error:0.01665063628974829
Epoch #81 Error:0.01624025390238075
Epoch #82 Error:0.015840975982198843
Epoch #83 Error:0.015452473445477831
Epoch #84 Error:0.015074427603268799
Epoch #85 Error:0.014706529817835498
Epoch #86 Error:0.01434848117196841
Epoch #87 Error:0.013999992150456149
Epoch #88 Error:0.013660782333060978
Epoch #89 Error:0.013330580098405907
Epoch #90 Error:0.013009122338232192
Epoch #91 Error:0.012696154181532556
Epoch #92 Error:0.012391428728107516
Epoch #93 Error:0.012094706791126003
Epoch #94 Error:0.011805756648306156
Epoch #95 Error:0.011524353801358704
Epoch #96 Error:0.011250280743361638
Epoch #97 Error:0.010983326733757084
Epoch #98 Error:0.010723287580681608
Epoch #99 Error:0.010469965430358991
Epoch #100 Error:0.010223168563300496
Epoch #101 Error:0.009982711197072901
Error:0.008355942023730691
OOO
O O
O O
O O
O O
O O
OOO -> 0
O
OO
O O
O
O
O
O -> 1
OOO
O O
O
O
O
O
OOOOO -> 2
OOO
O O
O
OOO
O
O O
OOO -> 3
O
OO
O O
O O
OOOOO
O
O -> 4
OOOOO
O
O
OOOO
O
O O
OOO -> 5
OOO
O O
O
OOOO
O O
O O
OOO -> 6
OOOOO
O
O
O
O
O
O -> 7
OOO
O O
O O
OOO
O O
O O
OOO -> 8
OOO
O O
O O
OOOO
O
O O
OOO -> 9



