实验报告 BP神经网络2150230509Word格式文档下载.docx

上传人:b****7 文档编号:21925733 上传时间:2023-02-01 格式:DOCX 页数:13 大小:165.24KB
下载 相关 举报
实验报告 BP神经网络2150230509Word格式文档下载.docx_第1页
第1页 / 共13页
实验报告 BP神经网络2150230509Word格式文档下载.docx_第2页
第2页 / 共13页
实验报告 BP神经网络2150230509Word格式文档下载.docx_第3页
第3页 / 共13页
实验报告 BP神经网络2150230509Word格式文档下载.docx_第4页
第4页 / 共13页
实验报告 BP神经网络2150230509Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验报告 BP神经网络2150230509Word格式文档下载.docx

《实验报告 BP神经网络2150230509Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验报告 BP神经网络2150230509Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

实验报告 BP神经网络2150230509Word格式文档下载.docx

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日内。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1