BP神经网络
1.BP神经网络介绍
- Back Propagation Neural Network(误差反向传播)
- 1986年,由McClelland和Rumelhart为首的科学家小组 提出,解决了多层神经网络的学习问题,极大促进了神经网络的发展。
- BP神经网络也是整个人工神经网络体系中的精华,广泛应用于分类识别,逼近,回归,压缩等领域。在实际应用中, 大约80%的神经网络模型都采取了BP网络或BP网络的变化形式。
2.BP神经网络结构
3.BP算法
4.常用激活函数
-
Sigmoid函数
-
Tanh函数和Softsign函数
Tanh函数:
Softsign函数:
-
ReLU函数
5.构建BP神经网络举例
- 网络结构
- 隐藏层
y0=x0v00+x1v10+x2v20
y1=x0v01+x1v11+x2v21
y2=x0v02+x1v12+x2v22
y3=x0v03+x1v13+x2v23 - 输出层
Out=y0w0+y1w1+y2w2+y3w3 - 矩阵可表示为
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