importnumpyasnpfromsklearn.datasetsimportload_digits
fromsklearn.preprocessingimportlabelbinarizer
fromsklearn.cross_validationimporttrain_test_split
defsigmoid(x):
return1/(1+np.exp(-x))
defdsigmoid(x):
returnx*(1-x)
classneuralnetwork:
def__init__(self,layers): #(64,100,10)
#權值的初始化,範圍-1到1
self.v=np.random.random((layers[0]+1,layers[1]+1))*2-1
self.w = np.random.random((layers[1] + 1, layers[2])) * 2 - 1
deftrain(self,x,y,lr=0.11,epochs=10000):
#新增偏置
temp=np.ones([x.shape[0],x.shape[1]+1])
temp[:,0:-1]=x
x=temp
forninrange(epochs+1):
i=np.random.randint(x.shape[0])#隨機選取乙個資料
x=[x[i]]
x=np.atleast_2d(x) #轉為2維資料
l1=sigmoid(np.dot(x,self.v)) #隱藏層輸出
l2=sigmoid(np.dot(l1,self.w)) #輸出層輸出
l2_delta=(y[i]-l2)*dsigmoid(l2)
l1_delta=l2_delta.dot(self.w.t)*dsigmoid(l1)
self.w+=lr*l1.t.dot(l2_delta)
self.v+=lr*x.t.dot(l1_delta)
#每訓練1000次**一次準確率
ifn%1000==0:
predictions=
forjinrange(x_test.shape[0]):
o =self.predict(x_test[j])
accuracy =np.mean(np.equal(predictions,y_test))
print('epoch:',n,'accuracy:',accuracy)
defpredict(self,x):
#新增偏置
temp=np.ones(x.shape[0]+1)
temp[0:-1]=x
x=temp
x=np.atleast_2d(x) #轉為2維資料
l1=sigmoid(np.dot(x,self.v)) #隱藏層輸出
l2=sigmoid(np.dot(l1,self.w)) #輸出層輸出
returnl2
digits =load_digits() #載入資料
x=digits.data #資料
y=digits.target #標籤
#輸入歸一化
x-=x.min()
x/x.max()
nm=neuralnetwork([64,100,10]) #建立網路
x_tain,x_test,y_train,y_test=train_test_split(x,y) #分割資料1/4測試,3/4訓練
labels_train=labelbinarizer().fit_transform(y_train) #標籤二值化
labels_test =labelbinarizer().fit_transform(y_test)
print('start')
nm.train(x_tain,labels_train,epochs=20000)
print('end')
基於BP神經網路的數字識別
bp back propagation 表示反向傳播。bp網路能學習和存貯大量的輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學 方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。bp神經網路模型拓撲結構包括輸入層 input 隱層 hi...
人工智慧 BP神經網路(數字識別)
摘要 構造乙個三層的 bp 神經網路,完成手寫 0 9 數字的識別。設計網路的結構,比如層數,每層的神經元數,單個神經元的輸入輸出函式 根據數字識別的任務,設計網路的輸入和輸出 實現 bp 網路的錯誤反傳演算法,完成神經網路的訓練和測試,最終識別率達到 70 以上 bp 演算法思想流程 初始化輸入訓...
模式識別演算法 BP網路設計
bp網路能學習和存貯大量的輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的 誤差平方和 最小。bp神經網路 模型拓撲結構包括輸入層 input 隱層 hide layer 和輸出層 output laye...