非学习型单层感知机的java实现(日志三)

要求如下:

所以当神经元输出函数选择在硬极函数的时候,如果想分成上面的四个类型,则必须要2个神经元,其实至于所有的分类问题,n个神经元则可以分成2的n次方类型。

又前一节所证明出来的关系有:

从而算出了所有的权重的值。。

代码实现如下:

第一个类是用来操实际操作的类,真正核心的内容是在PerceptronClassifyNoLearn中。

package com.cgrj.com;

import java.util.Arrays;

import org.neuroph.core.data.DataSet;
import org.neuroph.core.data.DataSetRow;
import org.neuroph.nnet.Perceptron;

public class MyNeturol {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DataSet trainingSet=new DataSet(2,2);
        trainingSet.addRow(new DataSetRow(new double[]{1,2},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{1,1},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{2,0},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{2,-1},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{-1,2},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{-2,1},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{-1,-1},new double[]{Double.NaN,Double.NaN}));
        trainingSet.addRow(new DataSetRow(new double[]{-2,-2},new double[]{Double.NaN,Double.NaN}));

        PerceptronClassifyNoLearn perceptronClassifyNoLearn=new PerceptronClassifyNoLearn(2);

        for(DataSetRow row:trainingSet.getRows()){
            perceptronClassifyNoLearn.setInput(row.getInput());
            perceptronClassifyNoLearn.calculate();
            double[] netWorkOutput=perceptronClassifyNoLearn.getOutput();
            System.out.println(Arrays.toString(row.getInput())+"="+Arrays.toString(netWorkOutput));

        }

    }

}

PerceptronClassifyNoLearn规定了输入层和输出层的属性和规则,由于是无法学的,所以其判定规则是依然设定好了的,在此类中。

package com.cgrj.com;

import org.neuroph.core.Layer;
import org.neuroph.core.NeuralNetwork;
import org.neuroph.core.Neuron;
import org.neuroph.nnet.comp.neuron.BiasNeuron;
import org.neuroph.nnet.comp.neuron.InputNeuron;
import org.neuroph.util.ConnectionFactory;
import org.neuroph.util.LayerFactory;
import org.neuroph.util.NeuralNetworkFactory;
import org.neuroph.util.NeuralNetworkType;
import org.neuroph.util.NeuronProperties;
import org.neuroph.util.TransferFunctionType;

public class PerceptronClassifyNoLearn extends NeuralNetwork {

        public PerceptronClassifyNoLearn(int inputNeuronsCount){
            this.createNetWork(inputNeuronsCount);

        }

        private void createNetWork(int inputNeuronsCount) {
            //设置网络感知机
            this.setNetworkType(NeuralNetworkType.PERCEPTRON);

            //构建输入神经元,表示输入的刺激
            NeuronProperties inputNeuronProperties=new NeuronProperties();
            inputNeuronProperties.setProperty("neuronType", InputNeuron.class);

            //由输入神经元构成的输入层
            Layer inputLayer=LayerFactory.createLayer(inputNeuronsCount,inputNeuronProperties);
            this.addLayer(inputLayer);
            //给输入层增加BiasNeron,表示神经元偏置
            inputLayer.addNeuron(new BiasNeuron());

            //构建输出神经元
            NeuronProperties outputNeuronProperties=new NeuronProperties();
            outputNeuronProperties.setProperty("transferFunction", TransferFunctionType.STEP);
            Layer outputLayer=LayerFactory.createLayer(2, outputNeuronProperties);
            this.addLayer(outputLayer);

            ConnectionFactory.fullConnect(inputLayer, outputLayer);
            NeuralNetworkFactory.setDefaultIO(this);
            Neuron n=outputLayer.getNeuronAt(0);
            n.getInputConnections()[0].getWeight().setValue(-3);
            n.getInputConnections()[1].getWeight().setValue(-1);
            n.getInputConnections()[2].getWeight().setValue(1);

            n=outputLayer.getNeuronAt(1);
            n.getInputConnections()[0].getWeight().setValue(1);
            n.getInputConnections()[1].getWeight().setValue(-2);
            n.getInputConnections()[2].getWeight().setValue(0);

        }
}
时间: 2024-10-03 13:45:25

非学习型单层感知机的java实现(日志三)的相关文章

基于STM32的学习型通用红外遥控设备的设计实现(三)

3.1 红外脉宽存储及FLASH的读写 根据STM32型号的不同,FLASH容量由16K到1024K不等. FLASH模块主要由三部分组成:主存储器.信息块.闪存存储器接口寄存器.模块组织见<STM32中文参考手册>小节<2.3.3 嵌入式闪存>. 主存储器用来存放代码和数据常数,对于大容量产品,划分为256页,每页2K字节:中小容量产品每页则是1K.信息块的启动程序代码用来存储ST自带的启动程序,用于串口下载,用户选择字节一般用来配置写保护.读保护.闪存存储器接口寄存器是整个闪存

【Java】检查型异常和非检查型异常

检查型异常(CheckedException)在Java中所有不是RuntimeException派生的Exception都是检查型异常.当函数中存在抛出检查型异常的操作时该函数的函数声明中必须包含throws语句.调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句. 检查型异常是JAVA首创的,在编译期对异常的处理有强制性的要求.在JDK代码中大量的异常属于检查型异常,包括IOException,SQLException等等. 非检查型异常(Unchec

Java检查型异常和非检查型异常

1.代码 public class ExcepTest { /** * @param args */ public static void main(String[] args) { System.err.println("111111111111"); // say(); //抛出异常,但是代码不显示的try..catch.. // calc(); //抛出异常,但是代码不显示的try..catch.. // try { // show(); // } catch (Exceptio

基于 Android NDK 的学习之旅----- C调用Java

http://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html 基于 Android NDK 的学习之旅----- C调用Java许多成熟的C引擎要移植到Android 平台上使用 , 一般都会 提供 一些接口, 让Android sdk 和 jdk 实现. 下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法. 1.主要流程 1.  新建一个测试类TestProvider.java a)       

检查型异常和非检查型异常

对于因为编程错误而导致的异常,或者是不能期望程序捕获的异常(解除引用一个空指针,数组越界,除零,等等),为了使开发人员免于处理这些异常,一些异常被命名为非检查型异常(即那些继承自 RuntimeException 的异常)并且不需要进行声明. Checked Exception和Unchecked Exception的几点不同之处 方法签名是否需要声明exception 调用该方法时是否需要捕获exception exception产生的时候JVM控制程序的状态 Sun 的"The JavaTu

Java学习总结(二)----Java语言基础

1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,int, long ,float,double,char,boolean,void 用于定义数据类型值的关键字 true,false,null 用于定义流程控制的关键字 If,else,switch,case,default, while,do,for,break,continue,return 用于

非递归实现先序遍历 java leecode 提交

写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse第一种方式:数据结构书上的,使用栈大概思路.1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈.2.因为栈顶的节点的左孩子为空,所以栈顶的的节点的左子树肯定访问完毕,所以出栈后直接指向右孩子.其实这里面有个思想迭代和递归的本质相同之处是什么?以后会写一篇我的思考. public class Solution { public List<Integer> preorderTraversal(T

学习Spring必学的Java基础知识(2)----动态代理

学习Spring必学的Java基础知识(2)----动态代理 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www

JAVA学习第一课(初识JAVA)

PS:退ACM集训队了,自己也疯玩了两天,后天就开学了,就正式大二了,该收收心好好学习啦                                                                                  JAVA概述 首先先复习一下基础常识: 1.软件开发 2.人机交互 3.经常使用的DOS命令 一.软件开发 什么是软件? 软件是一系列依照特定顺序组织的计算机数据和指令集合(指令:是处理数据的方式) 常见的软件有:系统软件(DOS.WIndows.