Java神经网络
- 前言
- Neuroph框架
- Neuroph结构
- 框架图
- Java API 及其类库说明(core nnet util)
- Neuroph简单案例实现
- 下载必要的Neuroph jar包
- 导入jar包
- 找案例(在书中或者网上)
- 运行
- 解决方案
前言
学了好一阵子时间的神经网络,对神经网络的感觉都还是朦朦胧胧的,感觉还是什么都不会,python代码也不是太熟悉,在写小案例的时候总是被一些奇奇怪怪的报错拦住,于是打算剑走偏锋用自己最熟悉的代码(Java)再去学一遍,文中若有错误还请大佬指正。
Neuroph框架
Neuroph 是轻量级的 Java 神经网络的框架,可以用来模拟常见的神经网络架构。少数基本类别相对应的基本网络的概念,它非常容易学习。它也有一个不错的 GUI 应用程序。
Neuroph结构
框架图
Java API 及其类库说明(core nnet util)
Java Api被分为三部分:core(核心组件) nnet(网络组件) util(工具组件)
类库 | 说明 |
---|---|
Neuroph简单案例实现
下载必要的Neuroph jar包
下面用的是neuroph-2.98 链接:https://neuroph.sourceforge.net/download.html
导入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>IDEANeuroph01</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>6</source><target>6</target></configuration></plugin></plugins></build><dependencies><dependency><groupId>org.beykery</groupId><artifactId>neuroph</artifactId><version>2.92</version><type>pom</type></dependency></dependencies></project>
找案例(在书中或者网上)
该案例是在网上找到的,附上原文链接:https://www.moban555.com/article/1016215.html
package com.kc;import java.util.Arrays;import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;
import org.neuroph.core.events.LearningEvent;
import org.neuroph.core.events.LearningEventListener;
import org.neuroph.core.learning.LearningRule;
import org.neuroph.nnet.Perceptron;
import org.neuroph.nnet.learning.BinaryDeltaRule;public class MyPerceptron implements LearningEventListener{public static void main(String[] args) {new MyPerceptron().TestPerceptron();}public void TestPerceptron() {// create new perceptron networkNeuralNetwork myperceptron = new Perceptron(2, 1);// create training set ANDDataSet trainingSet = new DataSet(2, 1);trainingSet.add(new double[]{0, 0}, new double[]{0});trainingSet.add(new double[]{0, 1}, new double[]{0});trainingSet.add(new double[]{1, 0}, new double[]{0});trainingSet.add(new double[]{1, 1}, new double[]{1});// print iteration logLearningRule lr = myperceptron.getLearningRule();lr.addListener(this);// learn the training setmyperceptron.learn(trainingSet);// save the trained network into filemyperceptron.save("or_perceptron_nnet");// load the saved networkNeuralNetwork neuralNetworkTest = NeuralNetwork.createFromFile("or_perceptron_nnet");// Test network - Single inputneuralNetworkTest.setInput(0, 0);neuralNetworkTest.calculate();double[] networkOutput = neuralNetworkTest.getOutput();System.out.println(networkOutput[0]);// Test network - set inputtestNeuralNetwork(myperceptron, trainingSet);}public 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) );}}@Overridepublic void handleLearningEvent(LearningEvent event) {BinaryDeltaRule rule = (BinaryDeltaRule)event.getSource();if (event.getEventType() != LearningEvent.Type.LEARNING_STOPPED)System.out.println(rule.getCurrentIteration() + ". iteration : "+ rule.getTotalNetworkError());}}
运行
解决方案
由上图可知代码编译前虽然没报错,但是在编译后却报错了。
通过一步步排查,我们找到他在DataSet这个类中少了一个文件,如图
解决如下: 去maven里下载一个,在pom.xml中添加其坐标
<dependency><groupId>javax.visrec</groupId><artifactId>visrec-api</artifactId><version>1.0.0</version></dependency>
再次运行: