神经网络java框架学习

1. Java神经网络框架 Neuroph

  Neuroph是轻量级的Java神经网络的框架,可以用来模拟常见的神经网络架构。Neuroph包含一个开源的java类库和少量对应基本神经网络概念的基类,以及easyNeurons GUI工具。
Neuroph Documentation

2. 神经网络开源框架 JOONE

  JOONE(Java Object Oriented Neural Network)是sourceforge.net上一个用java语言迅速开发神经网络的开源项目。JOONE支持很多的特性,比如多线程和分布式计算,使用的是BP算法进行迭代计算参数,这意味着可以JOONE可以利用多处理器或是多计算机来均衡负载。
  java版本的神经网络——开源框架JOONE实践


  • JOONE 主要有三个大的模块:

    • joone-engine:joone的核心模块
    • joone-editor:joone的GUI开发环境。图形界面建立神经网络模型,可以进行训练和验证。 JOONE中提供了一个用joone-editor建立XOR网络模型的例子。
    • joone-distributed-environment:joone 用于支持分布式计算的模块。

    基于 JOONE 快速开发神经网络

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

3. Java神经网络框架 Encog for Java

  Encog是一种先进的神经网络和漫游编程库。 Encog可以单独使用或者建立神经网络或HTTP爬虫程序。集成了支持向量机(SVM)、人工神经网络、遗传算法、贝叶斯网络、隐马尔可夫模型(HMM)、遗传编程和遗传算法。
ENncog Documentation

4. 三种框架对比

Benchmarking and Comparing Encog, Neuroph and JOONE Neural Networks

Comparing Neural Networks in Neuroph, Encog and JOONE
- Encog性能更好,中间层算法更丰富,适合实际工程应用
- Neuroph易于学习,图形界面易操作,适合神经网络初学者理解原理

5. Encog

github - encog-java-core

简单XOR demo

import org.encog.Encog;
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.neural.networks.BasicNetwork;
import org.encog.neural.networks.layers.BasicLayer;
import org.encog.neural.networks.training.propagation.resilient.ResilientPropagation;

public class XORHelloWorld {

    /**
     * 输入数据.
     */
    public static double XOR_INPUT[][] = { { 0.0, 0.0 }, { 1.0, 0.0 },
            { 0.0, 1.0 }, { 1.0, 1.0 } };

    /**
     * 期望输出.
     */
    public static double XOR_IDEAL[][] = { { 0.0 }, { 1.0 }, { 1.0 }, { 0.0 } };

    /**
     * 主程序.
     */
    public static void main(final String args[]) {

        // 创建神经网络.
        BasicNetwork network = new BasicNetwork();
        network.addLayer(new BasicLayer(null,true,2));
        network.addLayer(new BasicLayer(new ActivationReLU(),true,5));
        network.addLayer(new BasicLayer(new ActivationSigmoid(),false,1));
        network.getStructure().finalizeStructure();
        network.reset();

        // 创建训练集.
        MLDataSet trainingSet = new BasicMLDataSet(XOR_INPUT, XOR_IDEAL);

        // 训练神经网络.
        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();

        // 测试神经网络.
        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();
    }
}

你可能感兴趣的:(Java开发)