六_1.神经网络构建

一.认识神经网络

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,-阈值12
隐层f(x1,x2,阈值1),
f(x1,阈值1,x2),
f(x2,x1,阈值1),
f(x2,阈值1,x1),
-阈值2
4
输出层y1

六.输入层——>隐层的实现

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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐-import-某人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值