深度学习入门(三)BP神经网络——解决异或问题

原理部分:此部分主要数学知识为方程的求导,如不懂则直接重点看公式3.22a与3.22b



注:Wjk ,如W21代表从y2神经元到W1输出的权值 。Vij同理 xi到yj的权值

注:输出误差E是人为规定的一种评判去往与实际输出之间差距的公式

(d:期望输出向量,O输出层输出向量)


注:如果上述推导不懂,则直接看公式3.22a与3.22b(三层神经网络)

  3.22a中 n已知(学习率) dk已知  ok已知,yi已知,可以求出

3.22b同理

所以当初始化后可以把W与V,算出,然后使用梯度下降算法不断更改两个权值,训练算法等到最后将结果(具体细节内容未写出,后续再CS231n课程中解释)

代码部分:

用BP神经网络解决异或问题,即四点分类问题

 

import numpy as np
import matplotlib.pyplot as plt

X=np.array([[1,0,0],
            [1,0,1],
            [1,1,0],
            [1,1,1]])#此时的X数据为四个点,用单层感知器无法进行分类


#标签
Y=np.array([[0,1,1,0]])
#权值初始化,取值范围-1到1
V=np.random.random((3,4))*2-1
W=np.random.random((4,1))*2-1
print(V)
print(W)
#定义学习率
lr=0.11

def sigmoid(x):#激活函数
    return 1/(1+np.exp(-x))

def dsigmoid(x):#激活函数的倒数
    return x*(1-x)

def updata():#更新权值函数
    global X,Y,W,V,lr
   
    L1=sigmoid(np.dot(X,V))#隐藏层的输出(4,4)#sigmoid作用与输出乘以权值矩阵
    L2=sigmoid(np.dot(L1,W))#输出层的输出(4,1)#sigmoid作用与上一层输出乘以权重
   
    #公式3.21a与3.21b
    #误差信号
    #逆向传播先算L2的倒数,然后再算L1的倒数
    L2_delta=(Y.T-L2)*dsigmoid(L2)#L2的倒数=理想输出-实际输出*L2经过激活函数的倒数
    L1_delta=L2_delta.dot(W.T)*dsigmoid(L1)#L2的倒数=L2的倒数*权值(上一层的反馈)*L1进过激活函数的倒数
   
    #公式3.22a与3.22b
    #权值更新W的改变与V的改变
    W_C=lr*L1.T.dot(L2_delta)#学习率*L1.T*L2的倒数
    V_C=lr*X.T.dot(L1_delta)#同理
   
    W=W+W_C#W+W的改变
    V=V+V_C

for i in range(20000):#迭代20000次
    updata()#更新权值
    if i%500==0:#每隔500次输出一次误差
        L1=sigmoid(np.dot(X,V))#隐藏层的输出(4,4)
        L2=sigmoid(np.dot(L1,W))#输出层的输出(4,1)
        print ('Errir:',np.mean(np.abs(Y.T-L2)))#打印误差

        #查看最后结果     
L2_delta=(Y.T-L2)*dsigmoid(L2)
L1_delta=L2_delta.dot(W.T)*dsigmoid(L1)
print (L2)

#显示结果
def judge(x):
    if(x>=0.5):
        return 1
    else:
        return 0

for i in map(judge,L2):
    print(i)

结果:

误差迭代结果

Errir: 0.0180866139347
Errir: 0.0179476295453
Errir: 0.0178115917954
Errir: 0.0176783982971
Errir: 0.0175479515451
Errir: 0.017420158622
Errir: 0.0172949309258
Errir: 0.0171721839174
Errir: 0.0170518368842
Errir: 0.0169338127223
Errir: 0.0168180377318
Errir: 0.0167044414276
Errir: 0.0165929563614
Errir: 0.0164835179567
Errir: 0.0163760643544
Errir: 0.0162705362675
Errir: 0.0161668768464
Errir: 0.0160650315519
Errir: 0.0159649480366
Errir: 0.0158665760329
Errir: 0.0157698672493
Errir: 0.015674775271
Errir: 0.0155812554684
Errir: 0.01548926491
Errir: 0.0153987622803
Errir: 0.0153097078028
Errir: 0.0152220631678
Errir: 0.0151357914634
Errir: 0.0150508571112
Errir: 0.014967225805
Errir: 0.0148848644534
Errir: 0.0148037411251
Errir: 0.0147238249974
Errir: 0.0146450863075
Errir: 0.0145674963063
Errir: 0.0144910272144
Errir: 0.0144156521808
Errir: 0.0143413452436
Errir: 0.0142680812924
Errir: 0.0141958360334

最后模型结果:
[[ 0.00820949]
[ 0.98378477]
[ 0.9855559 ]
[ 0.01791453]]
0
1
1
0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容