BP神经网络的构建与使用.docx
- 文档编号:8043334
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:16
- 大小:495.66KB
BP神经网络的构建与使用.docx
《BP神经网络的构建与使用.docx》由会员分享,可在线阅读,更多相关《BP神经网络的构建与使用.docx(16页珍藏版)》请在冰豆网上搜索。
BP神经网络的构建与使用
BP神经网络的构建与使用
一、函数逼近:
1.实验内容:
选取
为测试函数,其中
,
。
构造独立的训练样本集和检验样本集,实验在不同的网络规模、样本集大小、学习速率等条件下,网络的学习能力、推广能力和性能上的差异。
2.实验过程:
用MATLAB构建并使用BP神经网络,这里网络训练采用Levenberg-Marquardt算法。
具体程序:
k=0.05;%随机数据的选取精度
m=1.0/k;%矩阵的行或列的数据个数
X=[k:
k:
1];
Y=[k:
k:
1];
%输入矩阵2*400
p=zeros(2,m*m);
fori=1:
m,
forj=1:
m,
p(1,(i-1)*m+j)=X(i);
p(2,(i-1)*m+j)=Y(j);
end
end
%输出矩阵1*400
Z1=zeros(1,m*m);
fori=1:
m,
forj=1:
m,
Z1(1,(i-1)*m+j)=sin(2*pi*X(i))*sin(2*pi*Y(j));
end
end
%BP神经网络
n=10;%隐层神经元数目
%建立BP网络结构,选择隐层和输出层神经元传递函数分别为
%tansig函数和purelin函数
%网络训练采用Levenberg-Marquardt算法trainlm
net=newff(minmax(p),[n,1],{'tansig','purelin'},'trainlm');
%网络训练
net.trainParam.epochs=50;%训练时间
net.trainParam.goal=0.01;%训练精度
net.trainParam.lr=0.001;%学习速率
net=train(net,p,Z1);
Z2=sim(net,p);
%将Z1和Z2转换成ZZ1(20*20),ZZ2(20*20)
ZZ1=zeros(m,m);
ZZ2=zeros(m,m);
fori=1:
m,
forj=1:
m,
ZZ1(i,j)=Z1(1,(i-1)*m+j);
ZZ2(i,j)=Z2(1,(i-1)*m+j);
end
end
%期望输出的曲面图
subplot(1,2,1)
surf(X,Y,ZZ1)
title('期望输出');
%实际输出的曲面图
subplot(1,2,2)
surf(X,Y,ZZ2)
title('实际输出');
3.实验结果及分析:
运行后,我们得到期望输出和实际输出的曲面图(图1),经过比较,原曲面图和非线性函数的曲面图很接近,这说明,经过训练,BP网络对非线性函数的逼近效果相当好。
图1
下面对网络规模、样本集大小、学习速率等条件进行修改并观察结果,分析这些因素对网络的学习能力、推广能力和性能上的影响。
1)神经元数目n变化
n=5(图2)
图2
n=10(图3)
图3
比较图2和图3,可以看出,隐层神经元的数目对于网络逼近效果有一定的影响,一般来说,隐层神经元数目越多,则BP网络逼近非线性函数的能力越强,而同时网络训练所用的时间相对来说更长一些。
2)样本集大小
40*40(图4)
图4
20*20(图5)
图5
比较图4和图5,可以看出,样本集的数目对于网络逼近效果有一定的影响,一般来说,样本集的数目越多,网络逼近效果越好。
3)学习速率
lr=0.001(图6)
图6
lr=0.01(图7)
图7
比较图6和图7,可以看出,学习速率对于网络逼近效果有一定的影响,一般来说,学习速率越小,网络逼近效果越好,但是学习速率过小会造成训练时间过长。
4.BP算法的改进
拟牛顿算法
图8
Levenberg-Marquardt算法
图9
在前馈反向传播网络应用中,对某一特定的问题,很难确定哪种训练算法最好,因为这取决于问题的复杂性、训练样本数、网络权重和阈值个数以及期望误差等许多因素。
一般来说,网络具有几百个权值时,采用Levenberg-Marquardt算法收敛速度最快。
如果要求正确训练时,该算法的优点更明显。
二、分类
1.实验内容:
进行Iris数据分类实验,通过实验选择具有最佳性能的网络结构和训练参数,并与最近邻分类器进行性能对比。
2.实验过程:
具体程序:
K=3;%类别
N=50;%每类的样本数目
M=4;%样本的维数
Q=zeros(M,N*K);%定义样本矩阵
%---------------读入数据--------------------------
[a,b,c,d]=textread('iris.txt','%f%f%f%f%*s','delimiter',',');
%放入4*150的矩阵中,每一列为一个样本
fori=1:
N*K,
Q(1,i)=a(i);Q(2,i)=b(i);Q(3,i)=c(i);Q(4,i)=d(i);
end
%将数据分成两部分,一部分用于训练,一部分用于测试
%等间距的方式抽取数据
xn_test=zeros(M,N*K/2);xn_train=zeros(M,N*K/2);
fori=1:
K*N/2,
forj=1:
M,
xn_test(j,i)=Q(j,i*2-1);
xn_train(j,i)=Q(j,i*2);
end
end
%训练目标,测试目标,三类,分别是100,010,001
dn_test=zeros(K,N*K/2);
dn_train=zeros(K,N*K/2);
forj=1:
K,
fori=1:
N/2,
dn_train(j,(j-1)*N/2+i)=1;
dn_test(j,(j-1)*N/2+i)=1;
end
end
%----------函数接口赋值----------------------------
NodeNum=20;%隐层节点数
TypeNum=3;%输出维数
p1=xn_train;%训练输入
t1=dn_train;%训练输出
Epochs=1000;%训练次数
P=xn_test;%测试输入
T=dn_test;%真实分类
%设置网络参数
%隐层的传递函数采用tan-sigmoid输出层采用线性传递函数
TF1='tansig';TF2='purelin';
%构造BP神经网络,网络训练采用Levenberg-Marquardt算法trainlm
net=newff(minmax(p1),[NodeNumTypeNum],{TF1TF2},'trainlm');
net.trainParam.epochs=Epochs;%最大训练次数
net.trainParam.goal=1e-8;%最小均方误差
net.trainParam.min_grad=1e-20;%最小梯度
net.trainParam.show=200;%训练显示间隔
%------------训练与测试----------------------------
net=train(net,p1,t1);%训练
X=sim(net,P);%测试-输出为预测值
X=full(compet(X))%竞争输出
%compet:
Competitivetransferfunction
%full:
Convertsparsematrixtofullmatrix
%结果统计
Result=~sum(abs(X-T))%正确分类显示为1
Percent=sum(Result)/length(Result)%正确分类率
3.实验结果及分析:
图10
对75组测试样本进行分类,其中结果1表示分类正确,0表示分类错误。
如图10所示,正确率达到93.33%,说明BP神经网络对数据集分类是可行的。
4.最近邻分类器
这里采用了K均值算法对数据集iris.txt进行分类。
1)K-Means算法描述
2)SAA类:
包装了KMeans聚类、聚类结果输出、正确率统计等
3)
工作流程:
4)部分代码:
✓聚类部分代码:
✓修改聚类中心的代码:
5)统计正确率:
(因为初始的聚类中心是随机选取的,所以每次运行的结果不一样):
图11
如图11所示,用K均值进行分类的正确率达到90.67%。
5.BP神经网络与最近邻分类器的性能对比
这里的BP神经网络,隐层的传递函数采用tan-sigmoid,输出层采用线性传递函数,网络训练采用Levenberg-Marquardt算法trainlm,隐层节点20,最小均方误差1e-8,最小梯度1e-20。
最近邻分类器随机选取初始聚类中心,最终聚成三类,并对正确率进行统计。
(因为结果只是聚成了三类,并不知道这三类究竟分别是哪一类,可以假设第一类为Iris-setosa,第二类为Iris-versicolor,第三类为Iris-virginica或者第一类为Iris-versicolor,第二类为Iris-setosa,第三类为Iris-virginica等,一共六种可能,选取其中正确率最高的作为最终结果)。
将iris.txt数据分成两部分(等间距的方式抽取数据),一部分用于训练,一部分用于测试。
对测试数据集测试五次,得到的正确率如表1所示:
1
2
3
4
5
BP神经网络
0.9467
0.9067
0.8800
0.8800
0.9333
最近邻分类器
0.906667
0.513333
0.826667
0.813333
0.913333
表1
观察两组数据可以看出,BP神经网络的性能比最近邻分类器好。
最近邻分类器中的第二次正确率仅为51.3333%,可见它的分类效果受初始点的选取影响很大,如果初始点选的不好,对整个分类器的性能有很大的影响。
体会:
通过本章内容的学习,我学会了使用MATLAB编写简单一些小程序,对BP神经网络有了更深入的了解,深入了解了BP神经网络的工作原理,通过做实验对影响BP神经网络性能的参数有了更深入的理解。
通过对BP神经网络、最近邻分类器的性能比较,知道了他们之间的差异和各自的优缺点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BP 神经网络 构建 使用
![提示](https://static.bdocx.com/images/bang_tan.gif)