MavenProject导神经网络框架neuroph包——java

按照神经网络与深度学习这本书进行学习,记录过程如下:

刚进行到第二章:neuroph框架学习



第一步:创建Java Maven project(不会,自行百度)


第二步:记住勾选上图中打√的地方,然后next




按照图片描述然后点击Finish




第三步:按照上面图片两步走,第二步过后进入下面的界面




第四步:打开浏览器输入下图红色选中框中的网址

点我开始跳转




第五步:比如我搜索的是java的神经网络框架neuroph,里面有很多各种各样的架包




第六步:复制上述代码贴到如下位置




点击保存过后基本上就是一路绿灯了。

参考此人博客的例子跑一下http://blog.csdn.net/xiaopangxia/article/details/54707742

code:

package web.v1;

import java.util.Arrays;

import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;
import org.neuroph.nnet.Perceptron;
/**
 * Created by 阿龙 on 2017/1/24.
 */
public class CalculatePerceptron {
	  public static void main(String args[]){
//        建立AND训练集
        DataSet trainAndSet = new DataSet(2, 1);
        trainAndSet.addRow(new DataSetRow(new double[]{0, 0}, new double[]{0}));
        trainAndSet.addRow(new DataSetRow(new double[]{0, 1}, new double[]{0}));
        trainAndSet.addRow(new DataSetRow(new double[]{1, 0}, new double[]{0}));
        trainAndSet.addRow(new DataSetRow(new double[]{1, 1}, new double[]{1}));

//        建立OR训练集
        DataSet trainOrSet = new DataSet(2, 1);
        trainOrSet.addRow(new DataSetRow(new double[]{0, 0}, new double[]{0}));
        trainOrSet.addRow(new DataSetRow(new double[]{0, 1}, new double[]{1}));
        trainOrSet.addRow(new DataSetRow(new double[]{1, 0}, new double[]{1}));
        trainOrSet.addRow(new DataSetRow(new double[]{1, 1}, new double[]{1}));

//        建立XOR训练集
        DataSet trainXorSet = new DataSet(2, 1);
        trainXorSet.addRow(new DataSetRow(new double[]{0, 0}, new double[]{0}));
        trainXorSet.addRow(new DataSetRow(new double[]{0, 1}, new double[]{1}));
        trainXorSet.addRow(new DataSetRow(new double[]{1, 0}, new double[]{1}));
        trainXorSet.addRow(new DataSetRow(new double[]{1, 1}, new double[]{0}));

//        建立感知机
        NeuralNetwork myPerceptron = new Perceptron(2, 1);
//        训练AND集
        myPerceptron.learn(trainAndSet);
        System.out.println("测试感知机AND集训练结果:");
        myPerceptron.save("AND_learn_result.nnet");
        testNeuralNetwork(myPerceptron, trainAndSet);

//        训练OR集
        myPerceptron.learn(trainOrSet);
        System.out.println("测试感知机Or集训练结果:");
        myPerceptron.save("OR_learn_result.nnet");
        testNeuralNetwork(myPerceptron, trainOrSet);

//        训练XOR集
//        由于XOR输入输出情况线性不可分,将无法完成训练
        myPerceptron.learn(trainXorSet);
        System.out.println("测试感知机Xor集训练结果:");
        testNeuralNetwork(myPerceptron, trainXorSet);


    }
    public static void testNeuralNetwork(NeuralNetwork nnet, DataSet tset) {

            for (DataSetRow dataRow : tset.getRows()) {

                   nnet.setInput(dataRow.getInput());
                   nnet.calculate();
                   double[ ] networkOutput = nnet.getOutput();
                   System.out.print("Input: " + Arrays.toString(dataRow.getInput()) );
                   System.out.println(" Output: " + Arrays.toString(networkOutput) );
                 }
           }
}

输出如下:

测试感知机AND集训练结果:
Input: [0.0, 0.0] Output: [0.0]
Input: [0.0, 1.0] Output: [0.0]
Input: [1.0, 0.0] Output: [0.0]
Input: [1.0, 1.0] Output: [1.0]
测试感知机Or集训练结果:
Input: [0.0, 0.0] Output: [0.0]
Input: [0.0, 1.0] Output: [1.0]
Input: [1.0, 0.0] Output: [1.0]
Input: [1.0, 1.0] Output: [1.0]

没有中间层,只有输入层与输出层。

一开始感知机中的权值W以及内部权值(那个常数)是随机给的。

可以看到经过四条训练数据的训练,感知机可以无误地对AND和OR运算训练集中的输入做出响应。

但是XOR运算的学习却无法完成,迭代不止。这与运算本身性质有关,XOR的结果表现为线性不可分,用简单的感知机模型是无法完成训练的,当采用更多层的网络。


好的,第一个小样例就结束了,第一次接触Java,觉得还是很神奇的。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值