Neuroph(2) -- 实现最简单的感知机

这篇博客介绍了如何在Java环境下使用Neuroph库创建和训练一个感知器神经网络。作者首先下载了neuroph-2.98.zip,然后在Java工程中添加必要的引用。接着,创建了一个2输入1输出的感知器网络,并用AND逻辑门的训练集进行训练。在训练过程中,作者添加了迭代日志,并保存和加载了训练好的网络。最后,对网络进行了单个输入和集合输入的测试。博客还抱怨了现有教程的不足,希望此记录能帮助遇到相同问题的人。

步骤:

  1. 下载JAR包 ,我用的neuroph-2.98.zip,注意不是neurophstudio-windows-2.98.exe;
  2. 建立Java工程;
  3. 添加引用,这个例子添加如下四个引用即可;
    在这里插入图片描述
  4. 对例子代码稍做修改:添加迭代日志输入,以及添加集合输入测试;

代码如下:

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());
    }

}

参考:

  1. Getting Started with Neuroph 2.98.pdf 【下载ZIP包自带】

  2. 《神经网络与深度学习》

    我只能说对于我这样的JAVA小白,这两个材料都太不友好,不是引用包少写一个就是代码残缺不全,看似简单的东西搞的一步一个坑,确实有必要记录一下,希望能帮到其他人。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值