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

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

作者: Yao_0 | 来源:发表于2017-07-06 17:13 被阅读0次

原理部分:此部分主要数学知识为方程的求导,如不懂则直接重点看公式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

相关文章

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

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

  • BP神经网络的梳理

    一 BP 神经网络简介 (1)BP神经网络在深度学习的地位 BP神经网络被称为“深度学习之旅的开端”,是神经网络的...

  • 神经网络简介

    BP神经网络结构 我们知道单层感知机(perceptron)的局限性:它无法解决异或(XOR)问题,或者其它线性不...

  • 深度学习入门系列,用白话文的方式让你看得懂学的快(第八章)

    8.1 BP神经网络极简史 在神经网络(甚至深度学习)参数训练中,BP(Back Propagation)...

  • BP神经网络

    BP神经网络 一、BP神经网络 神经网络能很好地解决不同的机器学习问题。神经网络模型是许多逻辑单元按照不同层级组织...

  • 卷积神经网络CNN

    一、卷积神经网络要解决的问题 传统的BP神经网络与DNN(深度神经网络)不同层神经元的连接方式是“全连接”,也就是...

  • 神经网络的初步构建

    神经网络算法几乎成为深度学习的代名词,未解决不同的场景问题,新的算法层出不穷,而BP(Back Propagati...

  • TensorFlow 深度学习中文第二版(初稿)

    TensorFlow 深度学习中文第二版 第 1 章深度学习入门人工神经网络ANN 如何学习?神经网络架构深度学习...

  • 2019-07-25 深度学习

    机器学习 - 神经网络 - 深度学习 图像 文本 语音 深度学习算法比机器学习都要好很多bp算法:多层感知器的误差...

  • 入门卷积神经网络

    “ 深度学习是在多层神经网络上运用各种机器学习算法,解决文本、图像问题的算法集合。其中卷积神经网络是深度学习的代表...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/jkshhxtx.html