一.认识神经网络
1.神经元认知
(1)神经元传输步骤
- 步骤1: 树突接触刺激,产生电流
- 步骤2: 判断并传输电流(判断条件: 电流强度)
- 若电流强度达到阈值,则传输。
- 若电流强度未达到阈值,不传输
(2)神经元传输过程
2.转换数学模型
- 步骤1: 传入数据 (x1,x2,x3…xi)
- 步骤2: 对传入数据进行加权求和
- 步骤3: 对求和数据减偏执项
- 步骤4: 输出或传输给其他神经元,yi
二.神经网络结构
1.误差值
三.网络训练流程
步骤1: 在(0,1)随机初始化所有链接值和阈值
步骤2: 重复以下过程,直到误差值最小/达到循环次数
- 根据网络输入和当前参数计算网络输出值y
- 计算输出层神经元梯度项gj
- 计算隐层神经元梯度项eh
- 更新连接权值和阈值
四.数学公式认知
1.激活函数
公式特点
2.W改变量
αE:E的偏导数,αWhj:W的偏导数,η:步长
2-1.W改变量
结论
3.关键因素公式
五.结构
层次 | 数据 | 神经元数量 |
---|---|---|
输入层 | x1,x2,-阈值1 | 2 |
隐层 | f(x1,x2,阈值1), f(x1,阈值1,x2), f(x2,x1,阈值1), f(x2,阈值1,x1), -阈值2 | 4 |
输出层 | y | 1 |
六.输入层——>隐层的实现
1.结构定义
data_网络输入=np.array([0.065735,0.044223,-1])
data_隐层权阈=np.zeros([3,4])
data_隐层输出=np.array([0.0,0,0,0,-1])
2.功能实现
def 激活(x):
return 1/(1+np.exp(-x))
3.执行
for i in range(4):
data_隐层输出[i]=激活(sum(data_网络输入*data_隐层权阈[:,i]))
print(data_隐层输出)
[ 0.5, 0.5, 0.5, 0.5, -1. ]
七.隐层——>输出实现
1.结构定义
data_输出层权阈=np.zeros([5])
2.功能实现
已定义
def 激活(x):
return 1/(1+np.exp(-x))
3.执行
data_输出层输出=激活(sum(data_隐层输出*data_输出层权阈))
print(data_输出层输出)
0.5
八.权阈值调整(核心)
1.公式+公式解读
Δ_输出层权阈=η*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)*data_隐层输出
Δ_输出层权阈[4]=-η*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)
for i in range(4):
Δ_隐层权阈[:,i]=η*data_隐层输出[i]*(1-data_隐层输出[i])*data_输出层权阈[i]*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)*data_网络输入
Δ_隐层权阈[2,i]=-η*data_隐层输出[i]*(1-data_隐层输出[i])*data_输出层权阈[i]*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)
2.常量设置
η=0.5
3.激活函数构建
def 激活(x):
return 1/(1+np.exp(-x))
4.权阈更新
Δ_输出层权阈=η*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)*data_隐层输出
Δ_输出层权阈[4]=-η*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)
data_输出层权阈=data_输出层权阈+Δ_输出层权阈
for i in range(4):
Δ_隐层权阈[:,i]=η*data_隐层输出[i]*(1-data_隐层输出[i])*data_输出层权阈[i]*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)*data_网络输入
Δ_隐层权阈[2,i]=-η*data_隐层输出[i]*(1-data_隐层输出[i])*data_输出层权阈[i]*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)
data_隐层权阈=data_隐层权阈+Δ_隐层权阈
5.功能组合
a=[]
b=[]
for it in range(1000): #训练轮数
# print('第',it,'轮训练')
for j in range(500): #样本输入
data_网络输入=np.array([data_训练集.iloc[j,0],data_训练集.iloc[j,1],-1])
y=data_训练集.iloc[j,2]
for i in range(4):
data_隐层输出[i]=激活(sum(data_网络输入*data_隐层权阈[:,i]))
data_输出层输出=激活(sum(data_隐层输出*data_输出层权阈))
# print('第',j,'个模型训练',data_输出层输出)
a.append(abs(y-data_输出层输出))
Δ_输出层权阈=η*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)*data_隐层输出
Δ_输出层权阈[4]=-η*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)
data_输出层权阈=data_输出层权阈+Δ_输出层权阈
for i in range(4):
Δ_隐层权阈[:,i]=η*data_隐层输出[i]*(1-data_隐层输出[i])*data_输出层权阈[i]*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)*data_网络输入
Δ_隐层权阈[2,i]=-η*data_隐层输出[i]*(1-data_隐层输出[i])*data_输出层权阈[i]*data_输出层输出*(1-data_输出层输出)*(y-data_输出层输出)
data_隐层权阈=data_隐层权阈+Δ_隐层权阈
b.append(np.mean(a))