接《構建一個簡單的人工神經網絡》——部分代碼

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()

‘''當神經網絡訓練好後,保存下訓練好的權值,再次運行時只需要把訓練好的權值代入網絡即可獲得最優解’‘’

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章