机器学习_神经网络_BP算法

BP神经网络

1.BP神经网络介绍

  • Back Propagation Neural Network(误差反向传播)
  • 1986年,由McClelland和Rumelhart为首的科学家小组 提出,解决了多层神经网络的学习问题,极大促进了神经网络的发展。
  • BP神经网络也是整个人工神经网络体系中的精华,广泛应用于分类识别,逼近,回归,压缩等领域。在实际应用中, 大约80%的神经网络模型都采取了BP网络或BP网络的变化形式。

2.BP神经网络结构

BP神经网络结构

3.BP算法

BP算法

4.常用激活函数

  • Sigmoid函数Sigmoid
    Sigmoid图像

  • Tanh函数和Softsign函数
    Tanh函数:Tanh函数
    Softsign函数:Softsign函数
    Tanh函数和Softsign函数图像

  • ReLU函数ReLU函数图像

5.构建BP神经网络举例

  • 网络结构
    BP神经网络举例
  • 隐藏层
    y0=x0v00+x1v10+x2v20
    y1=x0v01+x1v11+x2v21
    y2=x0v02+x1v12+x2v22
    y3=x0v03+x1v13+x2v23
  • 输出层
    Out=y0w0+y1w1+y2w2+y3w3
  • 矩阵可表示为
    BP算法举例矩阵表示1
    BP算法举例矩阵表示2

6.BP神经网络解决异或问题程序

  • 采用5.构建神经网络举例网络结构
  • 程序
import numpy as np
#输入数据
X = np.array([[1,0,0],
              [1,0,1],
              [1,1,0],
              [1,1,1]])
#标签
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 update():
    global X,Y,W,V,lr
    
    L1 = sigmoid(np.dot(X,V))#隐藏层输出(4,4)
    L2 = sigmoid(np.dot(L1,W))#输出层输出(4,1)
    
    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

输出权值v和w:
[[ 0.86721057 -0.90022621 0.99731177 -0.14064889]
[-0.67125645 -0.74732574 -0.07638257 0.48537049]
[-0.94840428 -0.17981453 0.42097935 0.82072693]]
[[ 0.76036509]
[ 0.30174859]
[ 0.95224232]
[-0.4658122 ]]

for i in range(20000):
    update()#更新权值
    if i%500==0:
        L1 = sigmoid(np.dot(X,V))#隐藏层输出(4,4)
        L2 = sigmoid(np.dot(L1,W))#输出层输出(4,1)
        print('Error:',np.mean(np.abs(Y.T-L2)))
        
L1 = sigmoid(np.dot(X,V))#隐藏层输出(4,4)
L2 = sigmoid(np.dot(L1,W))#输出层输出(4,1)
print(L2)

def judge(x):
    if x>=0.5:
        return 1
    else:
        return 0

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

输出:
Error: 0.0276676876861
Error: 0.0271536023241
Error: 0.0266652039884
Error: 0.0262004747412
Error: 0.0257576088499
Error: 0.025334985182
Error: 0.0249311438386
Error: 0.0245447662821
Error: 0.0241746583593
Error: 0.0238197357366
Error: 0.0234790113545
Error: 0.0231515845802
Error: 0.0228366317942
Error: 0.022533398193
Error: 0.0222411906277
Error: 0.0219593713277
Error: 0.0216873523834
Error: 0.021424590883
Error: 0.0211705846128
Error: 0.020924868247
Error: 0.020687009962
Error: 0.0204566084211
Error: 0.0202332900822
Error: 0.0200167067896
Error: 0.0198065336138
Error: 0.0196024669114
Error: 0.0194042225782
Error: 0.019211534473
Error: 0.0190241529943
Error: 0.0188418437906
Error: 0.0186643865917
Error: 0.0184915741469
Error: 0.0183232112587
Error: 0.0181591139024
Error: 0.0179991084232
Error: 0.0178430308014
Error: 0.0176907259808
Error: 0.0175420472525
Error: 0.01739685569
Error: 0.0172550196301
[[ 0.01737005]
[ 0.98343067]
[ 0.98346612]
[ 0.01799349]]
0
1
1
0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值