📄 xor_multipleinputs.java
字号:
/*--- formatted by Jindent 2.1, (www.c-lab.de/~jindent) ---*//* * JOONE - Java Object Oriented Neural Engine * http://joone.sourceforge.net * */package org.joone.samples.engine.multipleInputs;import java.io.File;import org.joone.engine.*;import org.joone.engine.learning.*;import org.joone.io.*;import org.joone.net.*;/** * Sample class to demostrate the use of the MultipleInputSynapse * * */public class XOR_multipleInputs implements NeuralNetListener { private NeuralNet nnet = null; private FileInputSynapse inputSynapse1, inputSynapse2, inputSynapse3; private FileInputSynapse desiredSynapse1, desiredSynapse2, desiredSynapse3; // private MemoryOutputSynapse outputSynapse; private InputSwitchSynapse inputSw, desiredSw; private static String inputFileName = "org/joone/samples/engine/multipleInputs/xor.txt"; /** * @param args the command line arguments */ public static void main(String args[]) { XOR_multipleInputs xor = new XOR_multipleInputs(); xor.initNeuralNet(); xor.train(); xor.interrogate(); } /** * Method declaration */ public void train() { // get the monitor object to train or feed forward Monitor monitor = nnet.getMonitor(); // set the monitor parameters monitor.setLearningRate(0.8); monitor.setMomentum(0.3); monitor.setTrainingPatterns(9); monitor.setTotCicles(2000); monitor.setLearning(true); nnet.addNeuralNetListener(this); nnet.go(true); System.out.println("Network stopped. Last RMSE="+nnet.getMonitor().getGlobalError()); } private void interrogate() { // neuralNet is an instance of NeuralNet Monitor monitor=nnet.getMonitor(); monitor.setTotCicles(1); monitor.setLearning(false); FileOutputSynapse output=new FileOutputSynapse(); // set the output synapse to write the output of the net output.setFileName("/tmp/xorOut.txt"); // inject the input and get the output if(nnet!=null) { nnet.addOutputSynapse(output); System.out.println(nnet.check()); nnet.go(true); } } /** * Method declaration */ protected void initNeuralNet() { // First create the three layers LinearLayer input = new LinearLayer(); SigmoidLayer hidden = new SigmoidLayer(); SigmoidLayer output = new SigmoidLayer(); // set the dimensions of the layers input.setRows(2); hidden.setRows(3); output.setRows(1); input.setLayerName("inputLayer"); hidden.setLayerName("hiddenLayer"); output.setLayerName("outputLayer"); // Now create the two Synapses FullSynapse synapse_IH = new FullSynapse(); /* input -> hidden conn. */ FullSynapse synapse_HO = new FullSynapse(); /* hidden -> output conn. */ // Connect the input layer whit the hidden layer input.addOutputSynapse(synapse_IH); hidden.addInputSynapse(synapse_IH); // Connect the hidden layer whit the output layer hidden.addOutputSynapse(synapse_HO); output.addInputSynapse(synapse_HO); // the input to the neural net inputSynapse1 = new FileInputSynapse(); inputSynapse2 = new FileInputSynapse(); inputSynapse3 = new FileInputSynapse(); inputSynapse1.setInputFile(new File(inputFileName)); inputSynapse1.setName("input1"); inputSynapse1.setAdvancedColumnSelector("1-2"); inputSynapse1.setFirstRow(1); inputSynapse1.setLastRow(4); inputSynapse2.setInputFile(new File(inputFileName)); inputSynapse2.setName("input2"); inputSynapse2.setAdvancedColumnSelector("1-2"); inputSynapse2.setFirstRow(2); inputSynapse2.setLastRow(4); inputSynapse3.setInputFile(new File(inputFileName)); inputSynapse3.setName("input3"); inputSynapse3.setAdvancedColumnSelector("1-2"); inputSynapse3.setFirstRow(3); inputSynapse3.setLastRow(4); inputSw = new MultipleInputSynapse(); inputSw.addInputSynapse(inputSynapse1); inputSw.addInputSynapse(inputSynapse2); inputSw.addInputSynapse(inputSynapse3); input.addInputSynapse(inputSw); // The Trainer and its desired output desiredSynapse1 = new FileInputSynapse(); desiredSynapse2 = new FileInputSynapse(); desiredSynapse3 = new FileInputSynapse(); desiredSynapse1.setInputFile(new File(inputFileName)); desiredSynapse1.setName("desired1"); desiredSynapse1.setAdvancedColumnSelector("3"); desiredSynapse1.setFirstRow(1); desiredSynapse1.setLastRow(4); desiredSynapse2.setInputFile(new File(inputFileName)); desiredSynapse2.setName("desired2"); desiredSynapse2.setAdvancedColumnSelector("3"); desiredSynapse2.setFirstRow(2); desiredSynapse2.setLastRow(4); desiredSynapse3.setInputFile(new File(inputFileName)); desiredSynapse3.setName("desired3"); desiredSynapse3.setAdvancedColumnSelector("3"); desiredSynapse3.setFirstRow(3); desiredSynapse3.setLastRow(4); desiredSw = new MultipleInputSynapse(); desiredSw.addInputSynapse(desiredSynapse1); desiredSw.addInputSynapse(desiredSynapse2); desiredSw.addInputSynapse(desiredSynapse3); TeachingSynapse trainer = new TeachingSynapse(); trainer.setDesired(desiredSw); // Now we add this structure to a NeuralNet object nnet = new NeuralNet(); nnet.addLayer(input, NeuralNet.INPUT_LAYER); nnet.addLayer(hidden, NeuralNet.HIDDEN_LAYER); nnet.addLayer(output, NeuralNet.OUTPUT_LAYER); nnet.setTeacher(trainer); output.addOutputSynapse(trainer); } public void cicleTerminated(NeuralNetEvent e) { } public void errorChanged(NeuralNetEvent e) { Monitor mon = (Monitor)e.getSource(); if (mon.getCurrentCicle() % 100 == 0) System.out.println("Epoch: "+(mon.getTotCicles()-mon.getCurrentCicle())+" RMSE:"+mon.getGlobalError()); } public void netStarted(NeuralNetEvent e) { Monitor mon = (Monitor)e.getSource(); if (mon.isLearning()) System.out.println("Training..."); } public void netStopped(NeuralNetEvent e) { System.out.println("Stopped"); } public void netStoppedError(NeuralNetEvent e, String error) { } }/*--- formatting done in "JMRA based on Sun Java Convention" style on 05-25-2002 ---*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -