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()
‘''當神經網絡訓練好後,保存下訓練好的權值,再次運行時只需要把訓練好的權值代入網絡即可獲得最優解’‘’