-
Notifications
You must be signed in to change notification settings - Fork 267
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Issue #230 make TrainEA.getMethod() return the best member of populat…
…ion.
- Loading branch information
1 parent
0266b18
commit 16836ad
Showing
3 changed files
with
66 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,58 +1,77 @@ | ||
/* | ||
* Encog(tm) Core v3.4 - Java Version | ||
* http://www.heatonresearch.com/encog/ | ||
* https://github.com/encog/encog-java-core | ||
* Copyright 2008-2017 Heaton Research, Inc. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
* For more information on Heaton Research copyrights, licenses | ||
* and trademarks visit: | ||
* http://www.heatonresearch.com/copyright | ||
*/ | ||
package org.encog; | ||
|
||
import org.encog.Encog; | ||
import org.encog.engine.network.activation.ActivationLinear; | ||
import org.encog.engine.network.activation.ActivationReLU; | ||
import org.encog.engine.network.activation.ActivationSigmoid; | ||
import org.encog.ml.data.MLData; | ||
import org.encog.ml.data.MLDataPair; | ||
import org.encog.ml.data.MLDataSet; | ||
import org.encog.ml.data.basic.BasicMLDataSet; | ||
import org.encog.ml.importance.PerturbationFeatureImportanceCalc; | ||
import org.encog.neural.networks.BasicNetwork; | ||
import org.encog.neural.networks.layers.BasicLayer; | ||
import org.encog.neural.networks.training.propagation.resilient.ResilientPropagation; | ||
import org.encog.neural.networks.training.propagation.sgd.StochasticGradientDescent; | ||
import org.encog.neural.networks.training.propagation.sgd.update.AdaGradUpdate; | ||
import org.encog.neural.networks.training.propagation.sgd.update.NesterovUpdate; | ||
import org.encog.neural.networks.training.propagation.sgd.update.RMSPropUpdate; | ||
import org.encog.neural.pattern.ElmanPattern; | ||
|
||
|
||
/** | ||
* XOR: This example is essentially the "Hello World" of neural network | ||
* programming. This example shows how to construct an Encog neural | ||
* network to predict the output from the XOR operator. This example | ||
* uses backpropagation to train the neural network. | ||
* | ||
* This example attempts to use a minimum of Encog features to create and | ||
* train the neural network. This allows you to see exactly what is going | ||
* on. For a more advanced example, that uses Encog factories, refer to | ||
* the XORFactory example. | ||
* | ||
*/ | ||
public class Test { | ||
|
||
/** | ||
* The input necessary for XOR. | ||
*/ | ||
public static double XOR_INPUT[][] = { { 0.0, 0.0 }, { 1.0, 0.0 }, | ||
{ 0.0, 1.0 }, { 1.0, 1.0 } }; | ||
|
||
/** | ||
* The ideal data necessary for XOR. | ||
*/ | ||
public static double XOR_IDEAL[][] = { { 0.0 }, { 1.0 }, { 1.0 }, { 0.0 } }; | ||
|
||
/** | ||
* The main method. | ||
* @param args No arguments are used. | ||
*/ | ||
public static void main(final String args[]) { | ||
|
||
ElmanPattern elmanPat = new ElmanPattern(); | ||
elmanPat.setInputNeurons(5); | ||
elmanPat.addHiddenLayer(5); | ||
elmanPat.setOutputNeurons(1); | ||
BasicNetwork network = (BasicNetwork) elmanPat.generate(); | ||
System.out.println(network.toString()); | ||
// create a neural network, without using a factory | ||
BasicNetwork network = new BasicNetwork(); | ||
network.addLayer(new BasicLayer(new ActivationReLU(),true,2)); | ||
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,3)); | ||
network.addLayer(new BasicLayer(new ActivationLinear(),false,1)); | ||
network.getStructure().finalizeStructure(); | ||
network.reset(); | ||
|
||
// create training data | ||
MLDataSet trainingSet = new BasicMLDataSet(XOR_INPUT, XOR_IDEAL); | ||
|
||
// train the neural network | ||
final ResilientPropagation train = new ResilientPropagation(network, trainingSet); | ||
|
||
int epoch = 1; | ||
|
||
do { | ||
train.iteration(); | ||
System.out.println("Epoch #" + epoch + " Error:" + train.getError()); | ||
epoch++; | ||
} while(train.getError() > 0.01); | ||
train.finishTraining(); | ||
|
||
// test the neural network | ||
System.out.println("Neural Network Results:"); | ||
for(MLDataPair pair: trainingSet ) { | ||
final MLData output = network.compute(pair.getInput()); | ||
System.out.println(pair.getInput().getData(0) + "," + pair.getInput().getData(1) | ||
+ ", actual=" + output.getData(0) + ",ideal=" + pair.getIdeal().getData(0)); | ||
} | ||
|
||
Encog.getInstance().shutdown(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters