# LinearNeuralNetwork **Repository Path**: kang-weichen/LinearNeuralNetwork ## Basic Information - **Project Name**: LinearNeuralNetwork - **Description**: 东北大学人工智能技术线性神经网络 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-12-04 - **Last Updated**: 2022-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java ## README ## 一、问题描述 简单的线性网络模型 **非正交输入模式集:** P1: 1 0 –1 0 P2: –1 0 0 1 P3: 0 –1 1 –1 P4: –1 –1 –1 0 **目标输出:**学号后四位 网络学习规则采用**Delt**规则:**Δwij =η·(ti-ai) · aj** 随机置初始权重:**W1 = W2 = W3 = W4 = 0** 置一个较小的学习率: **η = 0.5** 判断网络学习的准确程度,利用目标值与实际输出误差指标函数:**E = Sqrt(∑(tie-aie)2)** ## 二、系统设计 ### 2.1 变量设计 ```java //迭代矩阵 public int[][] mat = new int[][]{ {1,0,-1,0}, {-1,0,0,1}, {0,-1,1,-1}, {-1,-1,-1,0} }; //学号后四位 public int[] t = new int[]{6,9,9,6}; //要计算的权重(方程组的解) public double[] w = new double[4];//权,初始为0 //学习率 public double n = 0.5; //误差指标 public double E = 1; //存放输出的向量 double[] a = new double[4]; ``` ### 2.2 算法设计 1. 初始化a存放输出的向量 2. 计算输出误差 3. 四次学习模式对 4. 每个模式对进行权重的更新 5. 用新权重计算新输出 6. 计算误差,若大于设定标准返回到第三步 7. 输出权重和计算结果 ### 2.3 实验过程 首先**手算**方程组得到准确权重:**12,-24,6,21**。 然后设置`E == 0.2` ,进行训练,得到训练**结果**: **权重值**11.848990964897471 -23.819275297676533 5.999999999999999 20.761952558304287 **e** == 0.1858718112904721 可以看到计算结果十分接近准确值,训练结果**收敛**。 image-20221204144918197 ## 三、关键代码 完整代码访问gitee仓库:https://gitee.com/kang-weichen/LinearNeuralNetwork ```java public void compute(){ double[] a = new double[4];//存放输出的向量 double e = 0; //计算输出误差 for(int i=0;i<4;i++){ e+=Math.pow(t[i]-a[i],2); } e = Math.sqrt(e); while (e>E) { //四次学习模式对 for(int i=0;i<4;i++){//每个模式对 for(int j=0;j<4;j++){//四个更新 this.w[j] += n*(t[i]-a[i])*mat[i][j]; } //更新输出//用新权重计算输出 for (int l=0;l<4;l++){ a[l] = mat[l][0]*w[0]+mat[l][1]*w[1]+mat[l][2]*w[2]+mat[l][3]*w[3]; } } System.out.println("权重值"+this.w[0]+" "+this.w[1]+" "+this.w[2]+" "+this.w[3]); //计算输出误差 e = 0; for(int i=0;i<4;i++){ e+=Math.pow(a[i]-t[i],2); } e = Math.sqrt(e); System.out.println("e:"+e); } System.out.print("解:"); for(int i=0;i<4;i++){ System.out.print(a[i]+" "); } } ``` image-20221204144423186 ## 四、运行截图 image-20221204145043004