2017-11-22 01:49
前言:代码为python3,这是一个三层的神经网络,有两个输入,两个输出。
import numpy as np
def sigma(z):
return 1/(1+np.exp(-z))
def sigma_da(a):
return a*(1-a)
def run():
i1,i2=3,8#输入
o1,o2=0.2,0.9#输出
#初始化权值
w1,w2,w3,w4=0.15,0.20,0.25,0.30
w5,w6,w7,w8=0.40,0.45,0.50,0.55
#定义循环次数
m=200
#定义学习率
alpha=1
b1=0.35
b2=0.2
for i in range(m):
#前向传播
neth1=w1*i1+w2*i2+b1
neth2=w3*i1+w4*i2+b1
outh1=sigma(neth1)
outh2=sigma(neth2)
neto1=w5*outh1+w6*outh2+b2
neto2=w7*outh1+w8*outh2+b2
outo1=sigma(neto1)
outo2=sigma(neto2)
#总误差
Eo1=0.5*(o1-outo1)*(o1-outo1)
Eo2=0.5*(o2-outo2)*(o2-outo2)
Etotal=Eo1+Eo2
#反向传播
delta_o1=-(o1-outo1)*sigma_da(outo1)
delta_o2=-(o2-outo2)*sigma_da(outo2)
dw1=sigma_da(outh1)*i1*(delta_o1*w5+delta_o2*w7)
dw2=sigma_da(outh1)*i2*(delta_o1*w5+delta_o2*w7)
dw3=sigma_da(outh2)*i1*(delta_o1*w6+delta_o2*w8)
dw4=sigma_da(outh2)*i2*(delta_o1*w6+delta_o2*w8)
w1-=alpha*dw1
w2-=alpha*dw2
w3-=alpha*dw3
w4-=alpha*dw4
dw5=delta_o1*outh1
dw6=delta_o1*outh2
dw7=delta_o2*outh1
dw8=delta_o2*outh2
w5-=alpha*dw5
w6-=alpha*dw6
w7-=alpha*dw7
w8-=alpha*dw8
#输出值
print(outo1)
print(outo2)
if __name__=='__main__':
run()
‘''当神经网络训练好后,保存下训练好的权值,再次运行时只需要把训练好的权值代入网络即可获得最优解’‘’