Neuroph初次尝试(Maven Java)
此文是阅读《神经网络与深度学习》按照书内容而进行的尝试。
因为没有接触过Java,所以某些操作可能有些多余或错误,望见谅。
创建运行过程参考https://blog.****.net/qq_37059483/article/details/78359540
1.开发环境搭建
1.1安装SDK
- 下载最新的SDK
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
记得先accept我是windows 64所以选择最后一个。 - 下载完毕,开始安装 ,不再赘述,目录可以更改。网上有些博客说不必安jre,我顺手安了- -,不过好像真的没必要,jdk安装完毕自带了jre。
- 以下是最重要的步骤,配置环境变量。
计算机右键----->属性------->高级系统设置------>环境变量 - 点击下面的新建
变量名为:Java_Home,变量值为jdk安装目录
ps:我很久以前装过jdk 所以环境变量配置可能有点问题 我还有一个变量
双击Path变量(依旧是在下面系统变量内),添加%Java_Home%\bin(也可以把%Java_Home%换成jdk安装目录,因为我这样失败了,两个都加上了不知道为什么ok了),有的说要;%Java_Home%\bin;加分号在前后,没有尝试,大家可以试一下。
如果安装了jre也这样添加变量 - 打开cmd,输入java
如下就是成功了,如果不是一般是第4步有问题,可以在上面的Path(用户变量)里面再添加一下jdk路径尝试下。
1.2安装Maven
- 下载
下载地址:http://maven.apache.org/download.cgi
我下载的文件如图 - 解压到想要的地方
- 同上面添加环境变量,系统变量,path也同理。如果不行也按照上面尝试解决。
变量名:M2_HOME 变量值解压到的地址 - 打开cmd,输入mvn -v ,结果如下则成功按照。
- 有教程修改workplace,但是我失败了,就不再介绍。
1.3安装eclipse
- 下载
下载地址:https://www.eclipse.org/downloads/ - 安装没什么好说的
2.开始
- File->New->Project->next
- √第一个->next
- 第一个是包名前缀,第二个是项目名->finish
- 剩下的参照:
https://blog.****.net/qq_37059483/article/details/78359540
有一点点不一样:
https://maven.aliyun.com/mvn/search - 修改pom.xml,等待加载完毕(注意要加dependencies)
- 第一个右键->new->packge->web.v1(右键)->new->file
文件名为CalculatePerceptron.java
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) );
}
}
}
- 点run就好了
- 输出