1. 程式人生 > >BP神經網路Python實現異或問題

BP神經網路Python實現異或問題

# -*- 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)