Neuroph使用感知机识别坐标系

1.创建识别坐标系的感知机

         /**
	 * @author Ragty
	 * @param  创建识别坐标系的感知机
	 * @serialData 2018.4.22
	 * @param inputNerouCount
	 * @param outputNeurophCount
	 */
	public void creatNetwork(int inputNerouCount, int outputNeurophCount){
		
		//定义感知机类型
		this.setNetworkType(NeuralNetworkType.PERCEPTRON);
		
		//建立输入神经元,表示输入的刺激
		NeuronProperties inputNeuronProperties = new NeuronProperties();
		inputNeuronProperties.setProperty("neuronType", InputNeuron.class);
		
		//输入神经元构建的输入层
		Layer inputLayer = LayerFactory.createLayer(inputNerouCount, inputNeuronProperties);
		this.addLayer(inputLayer);
		
		//设置传递函数为step函数(即为是大于0为1,小于等于1为0)
		NeuronProperties outputNeuronProperties = new NeuronProperties();
		outputNeuronProperties.setProperty("transferFunction",TransferFunctionType.STEP);
		
		//指定输出层包含两个神经元
		Layer outputLayer = LayerFactory.createLayer(outputNeurophCount, outputNeuronProperties);
		this.addLayer(outputLayer);
		
		//输入输出层全连接
		ConnectionFactory.fullConnect(inputLayer, outputLayer);
		NeuralNetworkFactory.setDefaultIO(this);
		
		//设置连接权重(直接关系到神经网络能否正常工作)分 别为[1 0] [0 1]
		//因为要区分四个象限对应为[1,1] [0,1] [0,0] [1,0] stpe函数中负数表示为0
		//根据公式的话,以第一象限为例,要求第一想想上边得出的结果必须为1,下边得出的结果也必须为1
		//据此可推断出权重为 [1 0] [0 1]
		Neuron n = outputLayer.getNeuronAt(0);
		n.getInputConnections()[0].getWeight().setValue(1);   
		n.getInputConnections()[1].getWeight().setValue(0);
		
		n = outputLayer.getNeuronAt(1);
		n.getInputConnections()[0].getWeight().setValue(0);
		n.getInputConnections()[1].getWeight().setValue(1);
		
	}


2.输入两个值,判断为第几象限

          public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		String line = null;          
		double[] input = new double[2];
		//两个输入,两个输出的感知机
		feelPos perceptron = new feelPos(2, 2);

		try {
			while ((line = in.nextLine())!= null){
				String[] numbers = line.split("[\\s|,|;]");
				input[0] = Double.parseDouble(numbers[0]);
				input[1] = Double.parseDouble(numbers[1]);
				
				perceptron.setInput(input);
				perceptron.calculate();
				double[] networkOutput = perceptron.getOutput();
				System.out.println(Arrays.toString(input)+ "=" +posToString(networkOutput));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		
	}
	
	//判断为第几象限
	public static String posToString(double[] networkOutput ){
		if((networkOutput[0]+networkOutput[1])==2){
			return "第一象限";
		}else if((networkOutput[0]+networkOutput[1])==0){
			return "第三象限";
		}else if((networkOutput[0]-networkOutput[1])==1){
			return "第四象限";
		}
		return "第二象限";
	}


3.识别结果



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值