文档库 最新最全的文档下载
当前位置:文档库 › 第04讲 BP神经网络

第04讲 BP神经网络

第04讲 BP神经网络
第04讲 BP神经网络

BP 神经网络

一、例子部分

1、利用三层BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。 样本数据:

解:

看到期望输出的范围是()1,1-,所以利用双极性Sigmoid 函数作为转移函数。 程序如下:

clear; clc; X=-1:0.1:1;

D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609... 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988... 0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201]; figure;

plot(X,D,'*'); %绘制原始数据分布图(附录:1-1) %net = newff(X,D,5);

net = newff(minmax(X),[5,1],{'tansig','tansig'}) net.trainParam.epochs = 1000; %训练的最大次数 net.trainParam.goal = 0.005; %全局最小误差 net = train(net,X,D); O = sim(net,X); figure;

plot(X,D,'*',X,O); %绘制训练后得到的结果和误差曲线(附录:1-2、1-3) V = net.iw{1,1}%输入层到中间层权值 theta1 = net.b{1}%中间层各神经元阈值 W = net.lw{2,1}%中间层到输出层权值 theta2 = net.b{2}%输出层各神经元阈值

所得结果如下:

输入层到中间层的权值: ()-9.1669 7.3448 7.3761 4.8966 3.5409T

V = 中间层各神经元的阈值: ()6.5885 -2.4019 -0.9962 1.5303 3.2731T θ= 中间层到输出层的权值: ()0.3427 0.2135 0.2981 -0.8840 1.9134W = 输出层各神经元的阈值:-1.5271T =

图1-1 原始数据的分布

图1-2 训练后得到的结果

图1-3 误差曲线

2、利用三层BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

解:

看到期望输出的范围超出()1,1-,所以输出层神经元利用线性函数作为转移函数。 程序如下:

clear; clc;

X = [0 1 2 3 4 5 6 7 8 9 10]; D = [0 1 2 3 4 3 2 1 2 3 4]; figure;

plot(X,D,'*'); %绘制原始数据分布图(附录:2-1) %net = newff(X,D,5);

%net = newff(minmax(X),[5 1],{'tansig','purelin'}) net.trainParam.epochs = 1000; net.trainParam.goal=0.005;

net=train(net,X,D); O=sim(net,X); figure;

plot(X,D,'*',X,O); %绘制训练后得到的结果和误差曲线(附录:2-2、2-3) V = net.iw{1,1}%输入层到中间层权值 theta1 = net.b{1}%中间层各神经元阈值 W = net.lw{2,1}%中间层到输出层权值 theta2 = net.b{2}%输出层各神经元阈值

所得结果如下:

输入层到中间层的权值:()0.8584 2.0890 -1.2166 0.2752 -0.3910T

V = 中间层各神经元的阈值:()-14.0302 -9.8340 7.4331 -2.0135 0.5610T θ= 中间层到输出层的权值: ()-0.4675 -1.1234 2.3208 4.6402 -2.2686W = 输出层各神经元的阈值: 1.7623T =

图2-1 原始数据的分布

图2-2 训练后得到的结果

图2-3 误差曲线

3、以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个三层BP神经网络,利用该组信号的6个过去值预测信号的将来值。

解:

clear;

clc;

D1=[2011.682 2060.812 2107.751 2098.021 2181.241 2224.711...

2265.161 2260.822 2248.092 2320.792 2389.392 2319.442...

2209.862 2227.132 2261.482 2305.782 2200.652 2206.572...

2121.252 2082.852 2093.452 2071.432 2198.112 2221.082...

2193.012 2118.752 2158.572 2139.021 2133.881 2128.851...

2153.291 2218.331 2223.731 2265.761 2281.091 2325.481...

2338.421 2291.551 2361.701 2374.44];

D = premnmx(D1)%数据归一化把数据化到[-1,1]范围内

Q=length(D);

count = 1:1:Q;

X=zeros(6,0);

X(1,2:Q)=D(1,1:(Q-1));

X(2,3:Q)=D(1,1:(Q-2));

X(3,4:Q)=D(1,1:(Q-3));

X(4,5:Q)=D(1,1:(Q-4));

X(5,6:Q)=D(1,1:(Q-5));

X(6,7:Q)=D(1,1:(Q-6));

figure;

plot(count,D,count,D,'*'); %绘制原始数据分布图(附录:3-1) %net = newff(X,D,7)

net = newff(minmax(X),[7 1],{'tansig','tansig'}) net.trainParam.epochs = 1000; net.trainParam.goal=0.005; net=train(net,X,D); O=sim(net,X); figure;

plot(count,D,'*',count,O,'r'); %绘制训练后得到的结果和误差曲线(附录:3-2、3-3)

V = net.iw{1,1}%输入层到中间层权值 theta1 = net.b{1}%中间层各神经元阈值 W = net.lw{2,1}%中间层到输出层权值 theta2 = net.b{2}%输出层各神经元阈值 所得结果如下:

输入层到中间层的权值:

-2.4916 -3.0098 0.4381 1.1598 0.6343 -0.3355 -0.0899 0.6849 1.2969 0.2782 0.9312 1.2349 -0.2707 -1.7226 0.9445 1.7617 -0.2167 1.2791 2.1146 0.951V = 4 -0.8388 0.2214 0.1251 -0.6276 -0.1086 -0.7422 -0.1918 -0.4311 1.5800 0.4532 0.6519 1.9748 0.2787 -0.7819 0.7238 -0.0884 0.0084 -0.7738 -2.1268 -1.0499 -2.1740 -1.6249??

????????????????????

中间层各神经元的阈值:

()2.6717 1.9258 -0.0286 -1.2134 -1.0657 0.8908 1.6032 T

θ= 中间层到输出层的权值:

()2.6628 1.0361 -1.4160 2.2844 -0.3706 -1.4939 -1.4575W = 输出层各神经元的阈值:-0.5480T =

附录:

图3-1原始数据的分布

图3-2 训练后得到的结果

图3-3 误差曲线

二、理论部分

1、BP神经网络的定义

利用误差反向传播(Error Back Propagation)算法进行训练的单纯的前馈型人工神经网络称为BP神经网络。

2、BP神经网络模型

2.1、拓扑结构

网络输入:

()012

T

n X x x x x = 从外界向网络

网络输出:

()012 T

m Y y y y y = 中间层的输出

()12O=T l o o o 实际输出 ()1

2T

l D d d d = 期望输出

网络权值

()12l W W W W = 中间层到输出层的权值矩阵(1)m l W +?

()012= 1,2T

k k k

k mk W k l ωωωω=

()12=m V V V V 输入层到中间层的权值矩阵(1)n m V +?

()012= 1,2T

j j j

j nj V v v v v j m =

//网络阈值

// 1,2,k T k l = 输出层神经元 // 1,2,j j m θ= 输出层神经元

2.2、转移函数

中间层:

()0 1,2n j j ij i i y f net f v x j m =??

=== ???

输出层:

()()00010= 1,2m m k k jk j jk j j j m

n

jk ij i k j i o f net f y f f net f f v x k l

ωωωω====????

== ? ?

????????

=+= ? ?????∑∑∑∑

()11net f net e -=+(或者()11net

net

e f net e

---=+) ()()()()'1f net f net f net =-

从拓扑结构图可以看出,BP 神经网络可以看成一个非线性函数,网络输入值和预测值分别为该函数的自变量和因变量。当输入结点数为n ,输出结点数为l 时,BP 网络就表达了从n 个自变量到m 个自变量的函数映射关系。

2.3、学习规则(误差反向传播算法)

信号由输入层输入网络经中间层处理由输出层输出并利用期望输出和实际输出之间的误差对网络的权值和阈值由后向前逐层进行校正。

输入一样本后期望输出与实际输出的误差:

()()22

1

1122l k k k E D O d o ==-=-∑

()()2

21

101

122l

l

m k k

k jk j k k j d f net d f y ω===?

???=

-=- ? ? ????

?∑∑∑

2

011012l

m n k jk ij i k k j i d f f v x ωω===??????

=-+ ? ? ? ??????

?∑∑∑

E 为权值j k ω和i j v 的函数。权值调整的方向为其负梯度的方向。

()()1k

jk k k k k j jk k jk

net E E d o o o y net ωη

ηηωω????=-=-=--??? //()()1k

k k k k k k k k

net E E T d o o o T net T η

ηη????=-=-=--??? 令()()1o k k k k k d o o o δ=--,则

o jk jk jk jk k j y ωωωωηδ=+?=+(中间层和输出层之间权值调整公式)

//o

k

k k k k T T T T ηδ=+?=+(输出层神经元阈值调整公式) ()()()'

''

1

11l j ij k k k k jk j j i k ij j ij net E E v d o o o y y x v net v ηηηω=????=-=-=---???∑

()'

1

1l

o jk

k j j i k y y x η

ω

δ==-∑

//()()()''

1

11l

j j k k k k jk j j k j j net E d o o o y y net θηηωθ=???=-=---??∑

//()'

1

1l

o jk k j j k y y η

ω

δ==-∑

令()1

1l

y

o j

jk

k j j k y y δω

δ==

-∑,则

'y

ij ij ij ij j i

v v v v x ηδ=+?=+(中间层和输出层之间权值调整公式)

//'

y

j j j j j θθθθηδ=+?=+(输出层神经元阈值调整公式) 设训练样本集:1122{,},{,},,{,}Q Q X D X D X D Q 个样本

网络全局误差:()()()211

12Q l

k k t k E d t o t ===-∑∑(t :表示第t 个样本)

3、BP 神经网络的算法步骤

BP 网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。BP 神经网络的训练步骤如下:

第一步:网路初始化。

根据系统输入输出序列(),X O 确定网络输入层结点数n ,隐层结点数m ,输出层结点数l ,初始化输入层、隐层、输出层神经元之间的连接权值ij v ,jk ω (包含隐层阈值和输出层阈值,给定学习率和神经元转移函数。

第二步:输入一样本计算中间层的输出值 0,1,2,,j y j m = 作为输出层的输入。

第三步:计算输出层的输出 1,2,,k o k l = 。

第四步:计算输出层到中间层的误差信号 1,2,,o k k l δ= 。 第五步:计算中间层到输入层的误差信号 1,2,,y j j m δ= 。 第六步:调整输出层到中间层的权值和阈值j k ω。 第七步:调整中间层到输入层的权值和阈值ij v 。

第八步:输入下一样本返回第二步,直到所有样本输入完毕。

第九步:计算网络全局误差()()()211

12Q l

k k t k E d t o t ===-∑∑

第十步:判断误差是否达到预先设定的要求或者训练次数是否达到最大值,如果是算法结束,否则重新输入样本返回第二步。

4、BP 神经网络的应用 (1)、非线性函数的逼近问题 (2)、预测问题

5、设计BP 网络要注意的问题 5.1、样本方面

要对训练样本进行标准化处理,把样本数据转化到[0,1](单极性Sigmoid 函数)或者[-1,1](双极性Sigmoid 函数)之间。

min

max min

i i x x x x x -=

-

max min

max min

i i i x x x x x x x -+-=

-

5.2、中间层神经元个数选取方面

神经元应由少到多,选取训练完后全局误差最小时的神经元个数。 经验公式:

m α=

m =m 为隐层节点数,n 为输入层节点数,l 为输出层节点数,α为110 之间的常数。

5.3、训练方面

样本按一定的顺序训练完后应随机选取样本。

相关文档