bp神經網路學習

勿在浮沙築高臺LS發表於2017-04-11
import numpy as np

#使用邏輯迴歸進行分類
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] ])
print(X)
#每一行所對應的類,用0,1來表示       
y = np.array([[0,0,1,1]]).T
print(y)

#產生隨機種子
np.random.seed(1)

#隨機生成一個三行一列的資料
syn0 = 2*np.random.random((3,1)) - 1
print('產生隨機權重')
print(syn0)
for iter in range(10000):

    l0 = X
    #待分類的資料跟權值相乘,並且使用邏輯迴歸進行分類
    l1 = nonlin(np.dot(l0,syn0))

    #用標籤來計算分類的錯誤程度,計算出來負值說明要減小,計算出來正值說明要增大
    l1_error = y - l1
    #根據錯誤率來計算更改的幅度
    l1_delta = l1_error * nonlin(l1,True)
    #設定更改的值
    syn0 += np.dot(l0.T,l1_delta)
print ("Output After Training:")
print (l1)

相關文章