BP神经网络简单搭建

BP nueral network之y=sinx训练

“”“输入、输出都是一维向量”""
“”“训练y=sinx”""

import numpy as np

def sigmoid(x):
return 1/(1+np.exp(-x))
def gj(y, yc):
return yc*(1-yc)(y-yc)
def eh(h, y, yt, bh):
s = w[h]gj(y,yt)
return s
bh
(1-bh)

#算法第一步 在0-1内随机生成连接全和阈值
v = np.random.rand(3) #输入层与隐层的权重
r = np.random.rand(3) #输入层与隐层的阈值
w = np.random.rand(3) #隐层与输出层的权重
t = np.random.rand(1) #隐层与输出层的阈值
learningRate = 0.05 #学习率

#神经网络内部计算
#输入、输出都是一维向量
def networkUpdate(x, y):
#隐层输入
b0 = v[0]*x
b1 = v[1]*x
b2 = v[2]*x

#隐层输出
b0 = sigmoid(b0-r[0])
b1 = sigmoid(b1-r[1])
b2 = sigmoid(b2-r[2])

#输出层输入
a0 = w[0]*b0 
a1 = w[1]*b1
a2 = w[2]*b2 
a = a0 + a1 + a2

#输出层输出
yt = sigmoid(a-t[0])
b = [b0, b1, b2]

#BP神经网络的精髓
#更新w
for j in range(3):
    w[j] = w[j] + learningRate*gj(y, yt)*b[j]
        
#更新t
t[0] = t[0] - learningRate*gj(y, yt)

#更新v
for i in range(3):
    v[i] = v[i] + learningRate*eh(j, y, yt, b[i])*x
        
#更新r
for i in range(3):
    r[i] = r[i] - learningRate*eh(i, y, yt, b[i])

return yt

#训练好了用这个
def network(x):
#隐层输入
b0 = v[0]*x
b1 = v[1]*x
b2 = v[2]*x

#隐层输出
b0 = sigmoid(b0-r[0])
b1 = sigmoid(b1-r[1])
b2 = sigmoid(b2-r[2])

#输出层输入
a0 = w[0]*b0 
a1 = w[1]*b1
a2 = w[2]*b2 
a = a0 + a1 + a2

#输出层输出
yt = sigmoid(a-t[0])
return yt

#计算误差
def calculate(y, yt):

return ((yt-y)*(yt-y))/2

#计算最终与实际误差
def error(y, yt):
e = ((np.abs((y-yt)))/yt)
for a in e:
return a

def train():
#随机生成一个数据集,用作训练
x = []
for i in range(20000):
x.append(np.random.rand(1))
y = np.sin(x)

#训练神经网络
Ek = 10
while Ek>0.1:
Et = 0
for i in range(len(x)):
yt = networkUpdate(x[i], y[i])
Et = Et + calculate(y[i], yt)
Ek = Et / (len(x))

train()
#随机生成一个测试数据x验证
x_test = np.random.rand(1)
yt = network(x_test) #训练好了的神经网络
print(x_test)
print(yt)
print(error(np.sin(x_test), yt))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值