BP神经网络Python实现异或问题

来源:互联网 发布:中科汇通知乎 编辑:程序博客网 时间:2024/05/19 00:44
# -*- coding: UTF-8 -*-import matplotlib  as mplimport numpy  as npimport 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~1W=np.random.random((4,1))*2-1#权值的取值范围为-1~1print(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_Cfor 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 0for i in map(judge,L2):    print(i)
原创粉丝点击