`
帅得被人看
  • 浏览: 18031 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Joone 示例2

阅读更多
package com.pintn.joone;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.Vector;

import org.joone.engine.FullSynapse;
import org.joone.engine.LinearLayer;
import org.joone.engine.Monitor;
import org.joone.engine.NeuralNetEvent;
import org.joone.engine.NeuralNetListener;
import org.joone.engine.Pattern;
import org.joone.engine.SigmoidLayer;
import org.joone.engine.learning.TeachingSynapse;
import org.joone.io.MemoryInputSynapse;
import org.joone.io.MemoryOutputSynapse;
import org.joone.net.NeuralNet;

public class XOR_using_NeuralNet_RPROP implements NeuralNetListener,Serializable {
    private NeuralNet nnet = null; /* 初始化数据网络为空*/
    private MemoryInputSynapse  inputSynapse, desiredOutputSynapse; /*声明MemoryInputSynapse 的两个对象,输入神经元和 期望输出神经元为数组变量 */
    private MemoryOutputSynapse outputSynapse;
   
    // XOR input    双精度型二维数组 inputArray 并初始化  作为神经元的两个输入变量的数组   
    private double[][] inputArray = new double[][] {
        {0.0, 0.0},
        {0.0, 1.0},
        {1.03, 0.0},
        {0.98, 1.0}
    };
   
    // XOR desired output  双精度型二维数组 inputArray 并初始化  作为神经元的期望输出变量的数组  
    private double[][] desiredOutputArray = new double[][] {
        {0.0},
        {1.0},
        {0.103},
        {0.0}
    };
   
   
    public static void main(String args[]) {
XOR_using_NeuralNet_RPROP xor = new XOR_using_NeuralNet_RPROP();
       
       
        xor.initNeuralNet(); 
        xor.train();     
    }
   
     
    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);   //   输入层神经元的个数为2   因为 异或(0,1)(1,1)(1,1)(0,0)
        hidden.setRows(3);  //隐含层的神经元个数为 3 这个要根据实际的经验选取
        output.setRows(1);  //输出层的神经元个数为 1   输出异或运算结果
       
        // Now create the two Synapses
        FullSynapse synapse_IH = new FullSynapse();
        FullSynapse synapse_HO = new FullSynapse();
       
        // 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
        inputSynapse = new MemoryInputSynapse();
       
        input.addInputSynapse(inputSynapse);  //将输入神经元的输入作为神经网络 突触的输入变量
       
        // the output of the neural net
        outputSynapse = new MemoryOutputSynapse();
       
        output.addOutputSynapse(outputSynapse);//将输出神经元的输出作为神经网络突触的输入变量
       
        // The Trainer and its desired output
        desiredOutputSynapse = new MemoryInputSynapse();
       
        TeachingSynapse trainer = new TeachingSynapse();
       
        trainer.setDesired(desiredOutputSynapse);  //建立教师层,监视神经网络
       
        // 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 train() {
       
        // set the inputs
        inputSynapse.setInputArray(inputArray);   //神经网络的输入数组为inputArray数组
        inputSynapse.setAdvancedColumnSelector("1,2");//选择inputArray数组  前两个变量为输入变量
       
        // set the desired outputs
      desiredOutputSynapse.setInputArray(desiredOutputArray);
        desiredOutputSynapse.setAdvancedColumnSelector("1");//选择outputArray数组前一个变量为输出变量
       
        // 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);//设定神经网络的动量 为 0.3 这两个变量与步长有关
        monitor.setTrainingPatterns(inputArray.length);//训练的模式为输入数组的长度
        monitor.setTotCicles(5000);     //设定总训练次数为5000
        // RPROP parameters
//        monitor.getl
//        monitor.getLearner().add(0, "org.joone.engine.RpropLearner");
//        monitor.getLearners().add(0, "org.joone.engine.RpropLearner");
        monitor.setBatchSize(7);//修改
        monitor.setLearningMode(0);
       
        monitor.setLearning(true);//待学习的训练监控 
        nnet.addNeuralNetListener(this);//监听神经网络
        nnet.start();   //数据网路开始训练
        nnet.getMonitor().Go();//神经网络开始监控,并运行
    }
   
   
    public void cicleTerminated(NeuralNetEvent e) {
System.out.println("cicleTerminated...");//训练终结
    }
   
    public void errorChanged(NeuralNetEvent e) {
  // System.out.println("error...");
         Monitor mon = (Monitor)e.getSource();//得到监控层的信息
         System.out.println("Cycle: "+(mon.getTotCicles()-mon.getCurrentCicle())+" RMSE:"+mon.getGlobalError());    //输出  训练的次数和  rmse 均方误差
   }
   
    public void netStarted(NeuralNetEvent e) {
System.out.println("Training...");
    }
   
    public void netStopped(NeuralNetEvent e) {
  System.out.println("Training Stopped...");
 

  System.out.println(5000);
        Monitor mon = (Monitor)e.getSource();
        // Read the last pattern and print it out
        Vector patts = outputSynapse.getAllPatterns();
        Pattern pattern = (Pattern)patts.elementAt(patts.size() - 1);
        System.out.println("Output Pattern = " + pattern.getArray()[0] + " Error: " + mon.getGlobalError());   //输出最后的输出的结果和RMSE值  
        Date Mydate =new Date();  //初始化一个时间对象
        long mystr = System.currentTimeMillis(); //初始化当前的系统时间
        System.out.println(mystr); 
       
        saveNeuralNet("d:"+ mystr +"myxor.snet"); //保存生成当前时间的myxor.snet神经网络
    }
public void saveNeuralNet(String fileName) {
try {
FileOutputStream stream = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(stream);
out.writeObject(nnet);//写入nnet对象
out.close();
}
catch (Exception excp) {
excp.printStackTrace();
}
}




    private NeuralNet restoreNeuralNet(String fileName) {
        NeuralNet nnet = null;  
        try {
            FileInputStream stream = new FileInputStream(fileName);
            ObjectInput input = new ObjectInputStream(stream);
            nnet = (NeuralNet)input.readObject();
        }
        catch (Exception e) {
            System.out.println( "Exception was thrown. Message is : " + e.getMessage());
        }
        return nnet;
    }
 
   
   
    public void netStoppedError(NeuralNetEvent e, String error) {
    }
   
}
分享到:
评论

相关推荐

    joone 源码 附:外部所有外部jar

    你可以创建一个简单的Java程序来加载和训练网络,或者运行Joone提供的示例。 3. **调试与优化**:通过阅读源码,你可以了解Joone的内部运作机制,进一步进行定制化开发或性能优化。 4. **文档阅读**:虽然没有明确...

    Joone人工智能的一些资料

    这个压缩包可能包含了关于Joone框架的源代码、文档、示例或其他相关资源。从"源码"和"工具"这两个标签来看,我们可以期待在文件中找到与编程、理解和使用Joone相关的技术细节。 Joone框架的核心是其神经网络实现,...

    java的神经网络jar包joone.jar

    2. **神经网络模型**:Joone允许用户定义和配置不同的神经网络模型,包括多层感知器(MLP)、径向基函数网络(RBF)、自组织映射(SOM)等。这些模型可以用于分类、回归、预测等多种任务。 3. **训练算法**:Joone...

    joone.zip_joone

    2. **Joone架构**:Joone库的核心组件包括神经元(Neuron)、层(Layer)、网络(Network)和学习算法(Learning Algorithm)。用户可以通过这些组件构建自己的网络结构,并选择合适的训练算法进行模型优化。 3. **...

    LTSM需要的jar包joone

    2. **Java对象导向神经网络引擎(joone)**:joone是一个用纯Java编写的神经网络库,它提供了构建和训练各种神经网络模型的工具。joone支持前馈神经网络、自组织映射(SOM)、Hopfield网络等,并且允许用户自定义...

    joone-engine-1.1.2.zip_joone_joone-engine_joone-engine.jar_神经网络

    而"samples"目录则很可能包含了一些示例项目,这些示例可以帮助初学者快速理解和使用Joone Engine,通过实际操作学习如何创建、训练和应用神经网络模型。 总的来说,Joone Engine是一个强大且灵活的Java神经网络...

    joone-engine-2.0.0RC1

    2. **训练算法**:Joone包含多种训练算法,如反向传播(Backpropagation)、 resilient backpropagation(RPROP)、Levenberg-Marquardt等,这些算法可以帮助用户优化网络权重,提高模型的预测精度。 3. **数据...

    joone JAVA中的开源神经网络框架

    JooneCompleteGuide.pdf 很可能是Joone框架的完整指南,里面可能包含了详细的使用教程、API参考以及示例,帮助开发者快速上手。Joone-ext.zip 和 joone-engine-2.0.0RC1.zip 可能分别包含了Joone的扩展库和引擎库,...

    神经网络joone_engin模式识别示范,eclipse

    2. **Joone Engine**:Joone Engine是一个基于Java的神经网络开发平台,它允许开发者创建和训练自定义的神经网络模型。Joone Engine提供了丰富的API,可以方便地创建、连接神经元、设置学习算法等,支持前馈型、反馈...

    joone框架 java实现神经网络 模式识别

    而`joone-engine-2.0.0RC2-20070314.zip`则是Joone引擎的具体实现,包含了库文件和可能的示例代码,供开发者在项目中引入和使用。 总的来说,Joone框架为Java开发者提供了一个强大的工具,可以用于构建复杂的神经...

    java神经元网络框架(JOONE)

    为了帮助开发者更好地理解和使用JOONE,该框架提供了详尽的文档和示例代码,覆盖了从安装、基本用法到高级特性的方方面面。JOONE的源码开放,鼓励用户根据实际需求对其进行定制和扩展,这进一步增强了其在实际项目中...

    joone-engine-0.8.3.zip_Java 8_joone_神经网络 java

    2. **Readme.txt**:这是标准的开源项目文档,通常包含项目的简介、安装指南、使用示例、许可信息等内容。对于Joone Engine,Readme文件将帮助我们快速了解如何集成和使用这个库。 3. **org** 和 **releases**:这...

    开源java神经网络组件Joone、Encog和Neuroph的简单使用

    2. **网络定义**:根据问题需求创建神经网络架构,设定输入、隐藏和输出层的节点数量。 3. **数据准备**:提供训练和测试数据集,如XOR问题中的{[0, 0], [0]}, {[0, 1], [1]}, {[1, 0], [1]}和{[1, 1], [0]}。 4. **...

    用Java开源项目JOONE实现人工智能编程.doc

    以下是一个简单的示例,展示了如何使用JOONE创建一个神经网络并训练它进行XOR操作: ```java // 创建输入、隐藏和输出层 SigmoidLayer input = new SigmoidLayer(); SigmoidLayer hidden = new SigmoidLayer(); ...

    j2ee joone 技术论文

    ### j2ee joone 技术论文知识点解析 #### 一、概述 本文档探讨了在J2EE平台上,如何利用JSF(JavaServer Faces)技术实现数据表控件的分页功能,以应对大数据量访问及高并发访问场景下的性能优化需求。J2EE是一个...

    JooneCompleteGuide 关于构建神经网络

    此外,还提供了丰富的示例代码和最佳实践,帮助读者快速上手并掌握Joone的核心功能。 ##### 1.4 致谢 本书感谢所有对Joone项目做出贡献的开发者和支持者,没有他们的努力和奉献,Joone不会取得今天的成就。 #### ...

    比较Neuroph,Encog和JOONE中的神经网络

    Neural-Networks-in-Neuroph-Encog-and-JOO.pdf"文档,该文档详细分析了这三个框架在实现XOR网络时的具体代码和效果,以及"ThreeNetworks.zip"文件,其中包含了使用这三个库实现的XOR网络示例代码,可以作为实践和...

    用Java实现人工智能编程.pdf

    以下是一个简单的JOONE程序示例,展示了如何构建神经网络并进行训练: 1. 首先,创建输入层、隐藏层和输出层: ```java SigmoidLayer input = new SigmoidLayer(); SigmoidLayer hidden = new SigmoidLayer(); ...

    neuroph-29

    **应用示例** Neuroph可用于多种应用场景,例如图像识别、文本分类、股票市场预测、语音识别等。以下是一个简单的例子,演示如何使用Neuroph创建一个多层前馈网络: 1. 导入Neuroph库:首先,你需要在项目中导入...

Global site tag (gtag.js) - Google Analytics