Java神经网络(一)——Neuroph初次使用

Java神经网络

  • 前言
  • Neuroph框架
    • Neuroph结构
      • 框架图
      • Java API 及其类库说明(core nnet util)
    • Neuroph简单案例实现
      • 下载必要的Neuroph jar包
      • 导入jar包
      • 找案例(在书中或者网上)
      • 运行
      • 解决方案

前言

学了好一阵子时间的神经网络,对神经网络的感觉都还是朦朦胧胧的,感觉还是什么都不会,python代码也不是太熟悉,在写小案例的时候总是被一些奇奇怪怪的报错拦住,于是打算剑走偏锋用自己最熟悉的代码(Java)再去学一遍,文中若有错误还请大佬指正。


Neuroph框架

Neuroph 是轻量级的 Java 神经网络的框架,可以用来模拟常见的神经网络架构。少数基本类别相对应的基本网络的概念,它非常容易学习。它也有一个不错的 GUI 应用程序。

Neuroph结构

框架图

Java神经网络(一)——Neuroph初次使用_第1张图片

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 network
        NeuralNetwork myperceptron = new Perceptron(2, 1);

        // create training set AND
        DataSet 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 log
        LearningRule lr = myperceptron.getLearningRule();
        lr.addListener(this);

        // learn the training set
        myperceptron.learn(trainingSet);

        // save the trained network into file
        myperceptron.save("or_perceptron_nnet");

        // load the saved network
        NeuralNetwork neuralNetworkTest = NeuralNetwork.createFromFile("or_perceptron_nnet");

        // Test network - Single input
        neuralNetworkTest.setInput(0, 0);
        neuralNetworkTest.calculate();
        double[] networkOutput = neuralNetworkTest.getOutput();
        System.out.println(networkOutput[0]);

        // Test network - set input
        testNeuralNetwork(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) );
        }

    }

    @Override
    public void handleLearningEvent(LearningEvent event) {
        BinaryDeltaRule rule = (BinaryDeltaRule)event.getSource();
        if (event.getEventType() != LearningEvent.Type.LEARNING_STOPPED)
            System.out.println(rule.getCurrentIteration() + ". iteration : "+ rule.getTotalNetworkError());
    }

}

运行

Java神经网络(一)——Neuroph初次使用_第2张图片

解决方案

由上图可知代码编译前虽然没报错,但是在编译后却报错了。
通过一步步排查,我们找到他在DataSet这个类中少了一个文件,如图

Java神经网络(一)——Neuroph初次使用_第3张图片
Java神经网络(一)——Neuroph初次使用_第4张图片
解决如下: 去maven里下载一个,在pom.xml中添加其坐标

		<dependency>
            <groupId>javax.visrec</groupId>
            <artifactId>visrec-api</artifactId>
            <version>1.0.0</version>
        </dependency>

再次运行:

Java神经网络(一)——Neuroph初次使用_第5张图片

你可能感兴趣的:(神经网络,java,神经网络,开发语言)