BP神經網路Python實現異或問題
阿新 • • 發佈:2019-02-03
# -*- coding: UTF-8 -*- import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #BP神經網路實現異或問題 X=np.array([[1,0,0], [1,0,1], [1,1,0], [1,1,1]]) #輸入層3個節點,隱含層4個節點,所以需要3*4個權值 V=np.random.random((3,4))*2-1#權值的取值範圍為-1~1 W=np.random.random((4,1))*2-1#權值的取值範圍為-1~1 print(V) print(W) Y=np.array([[0,1,1,0]]) lr = 0.11 #學習率 n=0 #計算迭代次數 O=0#神經網路輸出 #定義sigmoid函式 def sigmoid(x): return 1/(1+np.exp(-x)) #sigmoid的導數 def dsigmoid(x): return x*(1-x) def update(): global X,Y,W,V,lr L1=sigmoid(np.dot(X,V))#隱含層的輸出,即輸入層的X矩陣和輸入層權值V相乘 L2=sigmoid(np.dot(L1,W))#輸出層的輸出L2_delta = (Y.T-L2)*dsigmoid(L2) L1_delta = L2_delta.dot(W.T)*dsigmoid(L1) W_C= lr*L1.T.dot(L2_delta) V_C= lr*X.T.dot(L1_delta) W = W+W_C V=V+V_C for i in range(20000): update() if(i%500==0): L1=sigmoid(np.dot(X,V))#隱含層的輸出,即輸入層的X矩陣和輸入層權值V相乘 L2=sigmoid(np.dot(L1,W))#輸出層的輸出 print('Error:',np.mean(np.abs(Y.T-L2))) L1=sigmoid(np.dot(X,V))#隱含層的輸出,即輸入層的X矩陣和輸入層權值V相乘 L2=sigmoid(np.dot(L1,W))#輸出層的輸出 print(L2) def judge(x): if(x>=0.5): return 1 else: return 0 for i in map(judge,L2): print(i)