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

前言

学了好一阵子时间的神经网络,对神经网络的感觉都还是朦朦胧胧的,感觉还是什么都不会,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 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());
    }

}

运行

在这里插入图片描述

解决方案

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

在这里插入图片描述
在这里插入图片描述
解决如下: 去maven里下载一个,在pom.xml中添加其坐标

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

再次运行:

在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 人工神经网络是一种模拟人脑的结构和功能的计算机算法。它由输入层、隐藏层和输出层组成,并通过计算权值和偏差来模拟人脑的神经元之间的信息传递。 下面是一个用 Java 实现的人工神经网络的简单示例: ``` import java.util.Arrays; public class ArtificialNeuralNetwork { // 输入层节点数 int inputLayerSize; // 隐藏层节点数 int hiddenLayerSize; // 输出层节点数 int outputLayerSize; // 输入层到隐藏层的权值矩阵 double[][] weightsInputToHidden; // 隐藏层到输出层的权值矩阵 double[][] weightsHiddenToOutput; // 输入层到隐藏层的偏差向量 double[] biasInputToHidden; // 隐藏层到输出层的偏差向量 double[] biasHiddenToOutput; public ArtificialNeuralNetwork(int inputLayerSize, int hiddenLayerSize, int outputLayerSize) { this.inputLayerSize = inputLayerSize; this.hiddenLayerSize = hiddenLayerSize; this.outputLayerSize = outputLayerSize; this.weightsInputToHidden = new double[inputLayerSize][hiddenLayerSize]; this.weightsHiddenToOutput = new double[hiddenLayerSize][outputLayerSize]; this.biasInputToHidden = new double[hiddenLayerSize]; this.biasHiddenToOutput = new double[outputLayerSize]; // 初始化权值和偏差为随机值 for (int i = 0; i < inputLayerSize; i++) { for (int j = 0; j < hiddenLayerSize; j++) { weightsInputToHidden[i][j] = Math.random(); } } for (int i = 0; i < hiddenLayerSize; i++) { for (int j = 0; j < outputLayerSize; j++) { weightsHiddenToOutput[i][j] = Math.random(); } biasInputToHidden[i] = Math.random ### 回答2: Java是一种常用的编程语言,在编写人工神经网络时也可以选择使用Java。人工神经网络是一种模拟人脑神经网络结构和功能的算法模型。 首先,我们需要导入Java的相关库来支持人工神经网络开发。常见的库有DL4J、Neuroph、Encog等。这些库可以提供人工神经网络所需的基本功能和算法。 接下来,需要定义神经网络的结构。人工神经网络由输入层、隐藏层和输出层组成。输入层用于接收外部数据,隐藏层进行数据的处理,输出层输出最终结果。我们可以通过设置网络层数和每层的神经元数量来定义神经网络的结构。 然后,需要初始化神经网络的权重和偏置。权重是神经网络中神经元之间的连接强度,偏置是神经元的激活阈值。可以随机初始化权重和偏置,并根据网络的学习算法来进行调整。 接下来,需要实现神经网络的前向传播和反向传播算法。前向传播用于将输入数据从输入层传递到输出层,反向传播用于根据输出结果来调整神经元的权重和偏置。这样可以逐渐优化神经网络的性能和准确性。 最后,需要对神经网络进行训练和测试。训练过程可以使用一组已知的输入和输出数据来不断调整神经网络的权重和偏置,直到达到期望的输出结果。测试过程可以使用另一组未知的数据来验证神经网络的性能和泛化能力。 在实现人工神经网络的过程中,还可以结合其他机器学习算法和技术来进一步优化网络的性能,如正则化、优化器、激活函数、损失函数等。 总结起来,用Java编写人工神经网络需要导入相关库、定义网络结构、初始化权重和偏置、实现前向传播和反向传播算法,最后进行训练和测试。通过不断优化网络的参数和算法,可以实现更准确和高效的人工神经网络模型。 ### 回答3: 要用Java写一个人工神经网络,首先需要了解人工神经网络的基本原理。人工神经网络是一种由人工神经元构成的网络模型,模拟了生物神经系统的工作原理。 在Java中,可以使用一些开源的库来实现人工神经网络,比如Encog、DL4J等。这些库提供了一些封装好的类和方法,方便我们构建和训练神经网络模型。 首先,我们需要定义一个神经网络的结构。可以使用这些库提供的类来创建输入层、隐藏层和输出层,设定每个层次的神经元数量等。 然后,我们需要定义神经网络的激活函数,常见的有sigmoid函数、ReLU函数等。通过将输入数据输入到神经网络中,并经过激活函数处理,可以得到网络的输出结果。 接下来是训练神经网络。我们需要准备一组带有特征和标签的数据集作为训练样本,通过反向传播算法来不断调整神经网络的权重和偏差,使得预测结果更接近真实标签。 在训练过程中,我们可以使用一些常见的优化算法,如梯度下降法、Adam算法等,来最小化神经网络的损失函数。 完成训练后,我们可以使用经过训练的神经网络来进行预测。将待预测的数据输入到网络中,经过前向传播,得到网络的输出结果。 最后,我们可以评估神经网络的性能,比如计算准确率、精确率等指标,以判断神经网络的有效性和可靠性。 总体来说,用Java写一个人工神经网络需要进行网络结构的定义、激活函数的选择、训练过程的实现和预测结果的评估。通过合理的设置和调整,可以构建出一个有效的人工神经网络模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔表表uuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值