实验报告 BP神经网络2150230509Word格式文档下载.docx
《实验报告 BP神经网络2150230509Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验报告 BP神经网络2150230509Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
4.算法步骤。
5.编程,注意原始数据的通用化,数据输入的随机性。
6.网络训练,注意训练数据与验证数据分开。
7.网络验证
7.结果分析,修改隐含层节点个数,修改学习率,分别对结果的影响。
8.体会,例如对下列问题的理解:
1)BP学习算法的基本思想?
2)BP网络设计中结点个数如何确定?
3)为什么要对数据进行通用标准化,即转为[-1,1]?
4)为什么要对训练数据的输入顺序进行随机化处理?
5)为什么训练数据与测试数据要分开?
注意:
如果用MatLab编程序,将下列数据存放到一个文本文件(例如data.dat),编写程序存放到一个m文件中(例如你的学号.m),数据文件和程序文件放在同一文件夹下。
运行MatLab后,指定上述文件夹为工作区域,在命令行运行m文件。
三、
实验步骤
前期工作:
首先将实验数据分为两组,一组用于训练,一组用于测试。
分别保存在trainData.txt和testData.txt中(115组训练数据和35组测试数据)。
如图所示:
各列数据代表的意义如下:
序号种类叶长叶宽花长花宽(单位:
cm)
114930142
2266294613
…
150365336025
(本实验设计一个BP网络,先用75%的数据对网络进行训练,然后用25%的数据进行检测。
)
网络设计:
输入层用4个节点,分别对应文件中的3/4/5/6列,隐层用3个节点。
因为输出有3类,我们也用3个节点来表示,分别对应100/010/001。
算法描述:
BP学习算法类似于LMS算法,它是基于梯度下降:
即权值按照错误信号的负梯度方向进行修改。
其主要优点在于将高层的错误表现反向传递为低层,从而修改权值。
第一步,初始化权值随机赋值,取值范围[-1,+1]
第二步,输入层FA输入样品,计算出隐层FB活动
第三步,计算出输出层FC活动
第四步,网络输出和期望输出相比较,计算出输出层FC的错误
第五步,反传,计算出隐层FB的错误
第六步,修改FC层和FB之间的权值wij
第七步,修改FA层和FB之间的权值vhj
第八步,修改偏差ti、fj
重复第二到第八步,直到输出层FC的错误足够小
MATLAB编程:
使用Matlab建立前馈神经网络主要会使用到下面3个函数:
newff:
前馈网络创建函数
train:
训练一个神经网络
sim:
使用网络进行仿真
MATLAB代码如下,根据隐含层节点个数、学习率、激活函数的选择不同只需要要稍作修改。
%读取训练数据
[id,class,f1,f2,f3,f4,]=textread('
trainData.txt'
'
%f%f%f%f%f%f'
);
%特征值归一化
[input,minI,maxI]=premnmx([f1,f2,f3,f4]'
);
%构造输出矩阵
s=length(class);
output=zeros(s,3);
fori=1:
s
output(i,class(i)+1)=1;
end
%创建神经网络
net=newff(minmax(input),[33],{'
logsig'
'
},'
traingdx'
);
%设置训练参数
net.trainparam.show=50;
net.trainparam.epochs=1500;
net.trainparam.goal=0.01;
net.trainParam.lr=0.01;
%开始训练
net=train(net,input,output'
[id2ct1t2t3t4]=textread('
testData.txt'
%测试数据归一化
testInput=tramnmx([t1,t2,t3,t4]'
minI,maxI);
%仿真
Y=sim(net,testInput)
%取最大者为1的位置作为识别结果
[resultmax,r]=max(Y);
testclass=r'
-1;
%统计识别正确率
[s1,s2]=size(Y);
hitNum=0;
s2
[m,Index]=max(Y(:
i));
if(Index==c(i)+1)
hitNum=hitNum+1;
end
sprintf('
Ê
¶
±
ð
Â
Ç
%3.3f%%'
100*hitNum/s2)
%输入到隐层权值
w1=net.iw{1,1}
%隐层阙值
bias1=net.b{1}
%隐层到输出层权值
w2=net.lw{2,1};
%输出层阙值
bias2=net.b{2}
以上程序的识别率稳定在94%左右,训练250次左右达到收敛,训练曲线如下图所示:
我们也可以用下面的语句来定位有误差的数据:
plot(id2,c)%预测数据
holdon%此命令能使所绘制的图形发生在已有的同一张纸上
plot(id2,testclass)%已知数据
holdoff
本例中我得出的结果是(训练的结果是不同的)
输入到隐层的权值:
w1=
16.37955.2873-5.1517-1.2917
0.9802-3.2833-0.3474-0.3002
5.94882.2175-2.62891.2639
隐层到输出层权值:
w2=
-3.36281.1942-11.3182
9.4958-11.6694-4.0900
-16.82-4.16067.9779
隐层阙值:
bias1=
-9.3618
0.4042
3.9510
输出层阙值:
bias2=
4.9943
5.7593
-0.4679
结果分析:
我在实验中尝试调整隐含层结点的个数,选择不同的激活函数,设定不同的学习率,说明如下:
<
1>
隐含层节点个数
隐含层节点的个数对于识别率的影响并不大,但是节点个数过多会增加运算量,使得训练较慢。
2>
激活函数的选择
激活函数无论对于识别率或收敛速度都有显著的影响。
在逼近高次曲线时,S形函数精度比线性函数要高得多,但计算量也要大得多。
上面的代码中我用的是'
logsig'
,识别率只有94%,但我换了'
purelin'
后发现识别率接近100%。
3>
学习率的选择
学习率影响着网络收敛的速度,以及网络能否收敛。
学习率设置偏小可以保证网络收敛,但是收敛较慢。
相反,学习率设置偏大则有可能使网络训练不收敛,影响识别效果。
Thetableshowsthedifferentresult
Case
Hiddennodes
Permittederror
Learningrate
Epoch
Accuracy(100%)
1
3
0.01
1241
94.286
2
6
1147
9
1067
4
0.005
1196
5
583
97.143
0.5
1159
7
0.3
43
28.571
8
0.05
111
97
71.429
10
96
54.286
(因为测试数据只有35组,所以准确率反映的情况不好,33/35即94%,34/35期97%)
当学习率和允许的误差太大的时候,训练情况是不收敛的。
对于本例来说,而当Permittederror和Learningrate合适的时候准确率基本稳定在94%。
四、总结分析
由于对MATLAB的不熟悉,自己将BP神经网络实现出来还是有难度的,于是我学习使用了MATLAB自带的神经网络工具箱,进而了解怎么样使用BP神经网络来进行蝴蝶花的分类。
思考题:
1)为什么要对数据进行通用标准化,即转为[-1,1]?
答:
输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。
由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。
例如神经网络的输出层若采用S形激活函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。
2)为什么要对训练数据的输入进行随机化处理?
BP网络本质上是个支持向量机,对输入顺序进行随机化处理是为了保证能够有监督学习,同时使算法按照梯度下降法则进行学习。
假如训练数据是有序的,那么会导致训练结果很难收敛到偏置值。
只有保证数据的随机性才能使得BP算法训练结果尽可能地收敛。
3)为什么训练数据与测试数据要分开?
用于测试的数据不能参与训练,否则识别度肯定是100%,我们的目的是通过对训练数据的学习来预测未知的数据。
4)BP网络设计中结点的个数如何确定?
并没有准确的确定方法,只要合理即可。
输入层和输出层的结点数量要足够表示,隐含层结点数量视情况而定。
5)BP学习算法的基本思想?
BP算法,误差反向传播(ErrorBackPropagation,BP)算法。
BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。
由于多层前馈网络的训练经常采用误差反向传播算法,人们也常把将多层前馈网络直接称为BP网络。
指导教师批阅意见:
√
实验报告内容的确完整性
(20分)
实验步骤的清晰程度
实验数据的准确性
实验结果和分析的正确性
实验态度(实验表现、格式排版、独立完成、按时提交)(20分)
完整
20
较完整
15
不够完整
清晰
较清晰
不够清晰
准确
较准确
不够准确
正确
较正确
不够正确
规范
较规范
不够规范
说明:
成绩评定:
指导教师签字:
朱安民
2016年4月10日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。