1. 程式人生 > >機器學習之簡單三層神經網路實現

機器學習之簡單三層神經網路實現

import numpy as np
#本專案實現簡單神經網路模型

#非線性函式
#前向傳播:直接返回sigmoid啟用函式
#反向傳播:對sigmoid函式求倒數,即x*(1-x)
def nonlin(x,deriv=False):
    if (deriv == True):
        return x*(1-x)
    return 1/(1+np.exp(-x))

#輸入樣本
x = np.array([[0,0,1],
             [0,1,1],
             [1,0,1],
             [1,1,1]])

#0代表一類,1代表一類
y = np.array([[0
], [1], [1], [0]]) np.random.seed(1) #初始化權重引數,構造一個3行4列的權重引數矩陣 w0 = 2*np.random.random((3,4))-1 w1 = 2*np.random.random((4,1))-1 for j in xrange(60000): #輸入層 l0 = x #中間層 l1 = nonlin(np.dot(l0,w0)) #輸出層 l2 = nonlin(np.dot(l1,w1)) #計算輸出與我們預定的結果的差距,如果l2_error很大,說明誤差很大,
#需要對W進行較大的調整 l2_error = y-l2 #每10000次列印一下 if (j % 10000) == 0: print "Error:" + str(np.mean(np.abs(l2_error))) #求l2的梯度 l2_delta = l2_error * nonlin(l2,deriv=True) #算出l1對追蹤結果誤差的影響,w1.T是w1的梯度 l1_error = l2_delta.dot(w1.T) #求l1的梯度 l1_delta = l1_error * nonlin(l1,deriv=True
) #對W0,W1進行修正 w1 += l1.T.dot(l2_delta) w0 += l0.T.dot(l1_delta)
Error:0.496410031903
Error:0.00858452565325
Error:0.00578945986251
Error:0.00462917677677
Error:0.00395876528027
Error:0.00351012256786