神经网络bp实验.docx
- 文档编号:9449768
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:232.79KB
神经网络bp实验.docx
《神经网络bp实验.docx》由会员分享,可在线阅读,更多相关《神经网络bp实验.docx(15页珍藏版)》请在冰豆网上搜索。
神经网络bp实验
实验二BP学习算法的简单应用
1.表达傅里叶核函数
2.自选——对称模式识别问题
一.实验目的
1.加深对bp学习算法的理解
2.通过实验熟悉并掌握bp网络的三层结构
3.通过上机实验掌握具体的实现方法,并应用于实际问题中。
二.实验原理
1.神经元——bp网络的基本单元
其中:
wi:
联结强度系数;b:
偏离值;:
整合函数;u:
整合量;f(u):
激发函数。
与其他神经网络一样,激发函数
除了线性函数外还可以有Tanh:
Sigmoid:
2.神经网络——由多个神经元构成
Bp网络的三元结构
其中:
OL为输出层,HL为隐含层,IL为输入层。
隐含层可能有多层如下图所示,对于绝大多数的应用,使用单隐含层的网络bp网络即可。
其中隐含层的激发函数限定为sigmoid或tanh函数,输入和输出层除了这两种还可以选择线性函数。
Bp网络结构
3.神经网络前馈结构
对于一个有n个输入的神经元,其输出o为:
其中w为权值,b为偏离值.
作为前向型网络,BPN的信号由输入层,一层一层地向前传递,直至传递到输出层,并产生其输出信号。
其输入层的节点一般无信号变换功能,只传递输入信号。
其前馈过程如图所示:
符合函数运算网络
对于网络的性能指标,可以使用Widrow性能函数,即对每个样本单独计算误差。
其中k表示第k个样本,e(k)=od(k)-o(k),od(k)是第k个样本的期望输出,o(k)是网络的计算结果。
或者Rumelhart性能函数,即对训练集内所有样本误差计算平均值,PN是训练集样本数量。
4.误差回传
Bp网络的训练是为了使误差减小,最小均方算法是通过计算性能函数的局部梯度来寻找极小点以达到这个目的。
由于bp网络涉及多层神经元的训练,因此需要计算复合函数求导来修改除了输出层外,其它层的网络权值。
因此,zj可通过对函数f求偏导直接计算:
(其中zj为网络中间层各节点的误差,o是网络的计算误差,即输出误差。
)
通过上式,网络把输出层的误差o回传给了网络中间层,输出节点的误差o被分配给网络中间层各个节点。
紧接着,经过复合函数求导,网络把中间层各节点的误差zj(j=1,2,…,m)回传给了网络输入层,中间层各节点的误差zj(j=1,2,…,m)分配给网络输入层各个节点。
公式如下:
(其中xi(i=1,2,…,n)为网络输入层各节点的误差)
这正是误差往回传播的现象:
网络输入层将误差回传给网络中间层,而中间层又将误差回传给网络输入层。
复合函数运算网络
若选择Widrow性能函数,那么其权值修改方式如下:
而修改权值的关键则在于计算局部梯度
。
三.实验内容
(1.表达傅里叶核函数)
使用bp网络,根据足够多的样本点,模拟出傅里叶核函数。
神经网络结构
神经元数量
激发函数
输入层
1
线性
隐含层
20
Tansig(双曲正切S形函数)
输出层
1
Tansig(双曲正切S形函数)
学习算法采用了trainlm算法
LM算法,该算法是一种利用标准数值优化计算的快速算法,是梯度下降法与高斯-牛顿法的结合算法。
LM算法既具有高斯-牛顿法的局部收敛性,又具有梯度下降法的全局特性。
LM算法利用了近似二阶导数的信息,因此它比梯度下降法快很多。
它是一种高效的算法,它基本思想是迭代过程中允许误差沿着恶化方向进行搜索,同时通过在梯度下降法与高斯-牛顿法之间的自适应调整,以达到优化网络权值和阈值的目的。
它能够使网络有效的收敛,提高了网络的泛化能力和收敛速度。
总的样本为0到5,以0.005为间隔的1000个样本点,其中训练样本为前800个样本点,测试样本为后200个样本点。
根据给出的数值,在matlab下的运行结果如下:
首先学习率为0.1,最大迭代次数为5000,目标误差为1e-7.
训练结果如下:
由上图可以看出,神经网络共两层,一个隐含层和输出层,隐含层包含20个神经元,此次训练迭代次数为422次,费时10s,迭代达到422次时梯度的数值达到9.91e-8小于目标值。
如图可知,网络的输出值与目标值基本重合。
可见bp网络已然能够很好的拟合傅里叶核函数。
隐含层的权值为:
50.1106465033191
-38.5729377609432
51.3329162482264
-36.1906480310195
22.9093470061502
-24.1297801823156
-25.6657084471335
27.2501483196426
27.9759650072261
28.0004370293701
27.9997051685878
27.7726139353618
25.8686937923241
23.5931142463198
-21.6411484550487
21.8593807312069
-41.8659100702361
42.7004546006592
89.3590598106020
63.5091177370486
50.1106465033191
(2.自选——对称模式识别问题)
对称模式识别问题:
一个6维对称模式的识别问题可描述为:
其中:
1)USYM:
对称模式,如:
010010,100001,101101等;
2)UNON:
非对称模式,如:
110010,100101,000101等。
本文用2表示非对称模式UNON,1表示对称模式USYM。
训练BPN的知识集K为:
。
其中,对于任意x(s),od(s),od(s)=1,当且仅当x(s)USYM。
总样本数为64个,其中对称的有8个,非对称的有56个。
选取其中的6个对称样本和31个非对称样本作为训练样本,选取5个对称样本(与测试样本有交叉)和25个非对称样本作为测试样本。
学习率选为0.1,目标误差为0.01,最大迭代次数为30000次。
神经网络结构
神经元数量
激发函数
输入层
1
线性
隐含层
2
logsig
输出层
2
purelin
学习函数为traingdx。
根据给出的数值,在matlab下的运行结果如下:
由上图可以看出,神经网络共两层,一个隐含层和输出层,隐含层包含2个神经元,此次训练迭代次数为358次,费时不到1s,迭代达到358次时梯度的数值达到0.01小于目标值。
其中识别率如下:
对应的权值如下:
可以看到权值基本呈左右对称形式。
附录:
(1.表达傅里叶核函数)
%%实验数据
%input=linspace(0,1,500)';
input=0.005:
0.005:
5;
output=fft(input);
output=abs(output);
k=rand(1,1000);
[m,n]=sort(k);
input_train=input(n(1:
800));
output_train=output(n(1:
800));
input_test=input(n(801:
1000));
output_test=output(n(801:
1000));
%%
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%%
net=newff(inputn,outputn,20);
net.trainparam.show=10;%
net.trainparam.epochs=5000;%迭代次数
net.trainparam.goal=1e-7;%误差要求
net.trainParam.lr=0.1;%学习率
net.trainParam.min_grad=1e-30;%最小梯度
net.trainParam.max_fail=200;
%%
net=train(net,inputn,outputn);
%%
inputn_test=mapminmax('apply',input_test,inputps);
outputn_test=mapminmax('apply',output_test,outputps);
an=sim(net,inputn_test);
BPoutput=mapminmax('reverse',an,outputps);
V=net.IW{1,1};
%输入层到中间层权值
theta1=net.b{1};
%中间层各神经元阈值
W=net.LW{2,1};
%中间层到输出层权值
theta2=net.b{2};
%%
figure
(1)
plot(BPoutput,':
og')
holdon
plot(output_test,'-*');
legend('预测输出','实际输出')
title('网络输出和实际输出对比')
error=BPoutput-output_test;%计算测试误差
figure
(2)
plot(error,'-*')
title('BP网络预测误差')
figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络训练误差百分比')
errorsum=sum(abs(error));%算出测试误差的绝对值和
(2.自选——对称模式识别问题)
%读取训练数据
[f1,f2,f3,f4,f5,f6,class]=textread('C:
\Users\gz\Desktop\重要程序\Matlab实现\train.txt','%f%f%f%f%f%f%f',70);
%特征值归一化
[input,minI,maxI]=premnmx([f1,f2,f3,f4,f5,f6]');
%构造输出矩阵
s=length(class);
output=zeros(s,2);
fori=1:
s
output(i,class(i))=1;
end
%创建神经网络
%net=newff(minmax(input),[21],{'logsig''purelin'},'traingdx');%
net=newff(minmax(input),[22],{'tansig','purelin'},'traingdx');%trainlm
%设置训练参数
net.trainparam.show=10;%
net.trainparam.epochs=30000;%迭代次数
net.trainparam.goal=1e-2;%误差要求
net.trainParam.lr=0.1;%学习率
net.trainParam.min_grad=1e-15;%最小梯度
%当前输入层权值和阈值
inputWeights=net.IW{1,1};
inputbias=net.b{1};
%当前网络层权值和阈值
layerWeights=net.LW{2,1};
layerbias=net.b{2};
%开始训练
net=train(net,input,output');
%读取测试数据
[t1,t2,t3,t4,t5,t6,c]=textread('C:
\Users\gz\Desktop\重要程序\Matlab实现\test.txt','%f%f%f%f%f%f%f',70);
%测试数据归一化
testInput=tramnmx([t1,t2,t3,t4,t5,t6]',minI,maxI);
%仿真
Y=sim(net,testInput);
%Y=sim(net,input);
%E=output'-Y;
%MSE=mse(E);
%figure;
%plot(testInput,c','r-',testInput,Y,'b-');
V=net.IW{1,1};
%输入层到中间层权值
theta1=net.b{1};
%中间层各神经元阈值
W=net.LW{2,1};
%中间层到输出层权值
theta2=net.b{2};
%统计识别正确率
[s1,s2]=size(Y);
hitNum=0;
fori=1:
s2
[m,Index]=max(Y(:
i));
if(Index==c(i))
hitNum=hitNum+1;
end
end
sprintf('识别率是%3.3f%%',100*hitNum/s2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 bp 实验