# 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
可以看到计算结果十分接近准确值,训练结果**收敛**。
## 三、关键代码
完整代码访问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]+" ");
}
}
```
## 四、运行截图
