西北农林科技大学研究生教学参考书《人工神经网络与应用实验指导》信息工程学院二〇一〇年十二月十三日实验一 MATLAB ANN工具箱及感知器实现一、实习目的和意义使学生熟悉并掌握Matlab基本运算编程和运行,掌握人工神经网络工具箱帮助、示例等资源,掌握自主学习Matlab编程的能力,并能设计实现感知器,为后续处理打下基础。
二、实习内容1、熟悉Matlab基本运算编程,掌握人工神经网络工具箱帮助、示例等资源。
(1)学会给矩阵赋值及常用矩阵运算;(2)学会在命令窗口单步执行命令;编写m文件及运行的方法;(3)掌握命令后“;”的显示控制作用,掌握清除命令窗口clc、图像窗口clf、内存和函数clear等命令的用法。
(4)学会用plot(x,y)绘制图形的方法;绘制双曲正切S函数的一阶导数曲线。
(5)掌握人工神经网络工具箱帮助、示例等资源。
2、设计一个感知器,并运行,分析结果、理解感知器算法。
三、实习参考(1)Matlab基本运算Matlab区分大小写,Abc,ABC,abc表示不同的矩阵名。
在矩阵A中,同一行中的内容用逗号分隔,而采用分号来表示换行。
一般情况下,用于同行中分隔的逗号是可以由空格来代替的。
基本的赋值语句:A=[1,2,3;4,5,6;7,8,0]矩阵加减法运算:C=A+B 和C=A-B。
矩阵的转置:A T=A’。
矩阵的点乘:C=A.×B矩阵的除法:x=A./B。
矩阵乘法:C=A×B对一个矩阵单个元素赋值和操作:A (:,j )表示A 矩阵的第j 列元素;A (i ,:)表示A 矩阵的第i 列全部元素。
在命令窗口中,输入 help 命令,如help plot ,则会给出相关的帮助信息。
(2)S 曲线函数式为xe xf y -+==11)(,设x 在[-10,10]之间每隔0.1取一个值。
用plot()绘制S 曲线。
可编写m 文件(polt_s.m )如下:%画S 曲线 x=[-10:0.1:10]; %给x 赋值 y=1./(1.0+exp(-x)) %计算yplot(x,y) %绘制x-y 关系曲线(S 曲线) hold on %保持图形,在原图上继续绘制 y1=y*(1.-y); %计算S 曲线的一阶导数 plot(x,y1,'--r')%绘制S 曲线的一阶导数曲线(3)设计一个二维输入矢量分为两类。
%gzq1.m%P 输入向量,T 为目标向量 P=[-1.0 -0.5 +0.3 -0.1; -0.5 +0.5 -0.5 +1.0] T=[1 1 0 0];plotpv(P,T); %绘制感知器的输入输出矢量 disp('按任意键继续.') pause %按任意键继续net=newp([-1 1;-1 1],1); %NEWP 建立一个感知器. plotpv(P,T); %绘制输入向量 plotpc(net.IW{1},net.b{1}); %绘制初始分类线net.adaptParam.passes = 3;net = adapt(net,P,T); %ADAPT 返回一个最佳分类的网络ner plotpc(net.IW{1},net.b{1}); %绘制训练后的分类线%利用训练好的感知器进行分类p=[0.7;1.2]; %给定一个输入a=sim(net,p) %SIM对感知器神经网络进行仿真.行尾无“;”号,%在命令窗口显示a的值。
disp('结束!')四、思考与讨论1、如何控制程序运行暂停时间?2、比较一个命令行后有无“;”的差别。
3、画出gzq1.m中网络模型。
4、查帮助并分析plot、plotpv、plotpc的不同。
实验二自适应线性元件的设计与训练一、实习目的和意义掌握用Matlab人工神经网络工具箱设计自适应线性元件的方法,掌握人工神经网络学习和训练过程;理解误差曲面;分析比较自适应线性元件的不足。
二、实习内容1、掌握自适应线性元件的方法。
设计一个线性神经元响应特定输入下的目标输出:P = [1.0 -1.2];T = [0.5 1.0];用ERRSURF函数计算在一定范围可能权重和阈值下的神经元的误差,用PLOTES以等高线的形式绘制误差表面,并在误差曲面上绘制出最佳权重、阈值的点。
2、设计一个线性神经元件,线性神经元以实现对输入矢量P = [+1.0 +1.5 +3.0 4.5]和输出矢量T = [+0.5 +1.1 +1.7 2.6]的线性拟合。
3、在上面的网络设计中,不断增大学习率,分析学习大小对训练次数及网络能否收敛的影响。
三、实习参考(1)自适应线性元件的方法及误差曲面分析% 模式联想误差曲面% 设计一个线性神经元响应特定输入下的目标输出% P定义两个1单元的输入模式,T定义相关的1单元的目标矢量P = [1.0 -1.2];T = [0.5 1.0];% ERRSURF计算在一定范围可能权重和阈值下的神经元的误差% PLOTES绘制误差表面.并在误差曲面上绘制出最佳权重、阈值的点。
w_range = -1:0.1:1; %权重取值范围b_range = -1:0.1:1; %阈值取值范围ES = errsurf(P,T,w_range,b_range,'purelin'); %计算误差plotes(w_range,b_range,ES); %绘制误差曲面pausenet = newlind(P,T); %函数NEWLIND设计一个误差最小的网络层%SIM仿真网络的输入P。
可以计算出神经元的误差,A = sim(net,P)E = T - ASSE = sumsqr(E) %SUMSQR累加平方误差plotes(w_range,b_range,ES); %重新绘制误差曲面pauseplotep(net.IW{1,1},net.b{1},SSE);%用SOLVELIN返回的权值和阈值在误差曲面上绘制出位置% 用一个输入进行测试。
p = -1.2;a = sim(net,p)(2)线性拟合线性元件设计%拟合线性问题% P-输入矢量;T-目标矢量P = [+1.0 +1.5 +3.0 4.5];T = [+0.5 +1.1 +1.7 2.6];%计算最大学习率,包括阈值maxlr = maxlinlr(P,'bias');%newlin用于建立一个线性网络net = newlin([-2 2],1,[0],maxlr);%设置最大训练步数net.trainParam.epochs = 15;[net,tr] = train(net,P,T);%tr为训练记录(训练步数,性能)%仿真p = -1.1;a = sim(net, p)四、思考与讨论1、自适应线性元件和感知器有哪些不同?2、自适应线性元件的传递函数是哪种类型?3、自适应线性元件设计为多层是否可以提高网络性能?4、学习率大小对训练次数及网络性影响如何?实验三 BP网络设计与训练(一)一、实习目的和意义掌握用Matlab人工神经网络工具箱设计BP网络的方法,掌握BP网络的设计以及训练过程;掌握用BP网络进行函数逼近和分类的基本设计方法;分析比较几种BP训练算法的训练性能;掌握动量法、自适应学习速率算法的设计和应用;通过实验,对局部极小问题有深入的理解。
二、实习内容1、设计并训练一个BP网络,使其进行模式p = [-1 -1 2 2; 0 5 0 5]进行分类。
2、用动量法训练BP网络,比较动量法和纯梯度法对同一个BP网络进行训练的效率。
3、设计一个BP网络,用于逼近一个函数。
该函数输入范围为[-2,2],输出为T=sin(2*pi*P)+0.2*randn(size(P))。
改变隐层神经元数量,分析比较不同隐层神经元数量下网络训练效率及最终训练结果。
4、设计一个BP网络,用自适应学习率算法对其训练,用于逼近一个函数。
21个输入在[-1,1]之间,输出为[-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 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201]。
5、在实习内容3中,事先给定一个不合适的初始权值和阈值,考察局部极小值问题。
三、实习参考1、BP算法主要函数:(1)变换函数:对数S型激活函数logsig.m;双曲正切S型激活函数tansig.m;线性激活函数purelin.m;(2)误差相关函数:误差函数sumsqr.m;误差的变化函数deltalin.m,deltatan.m和deltasig.m,分别用于线性层、双曲正切层和对数层。
(3)newff,生成一个前向网络,如,net = newff([0 10],[5 1],{'tansig' 'purelin'},’trainlm’ );(4)网络训练函数:A、train() 纯梯度法训练一个神经网络;B、traingda() 自适应学习速率梯度下降法;C、trainrp()回弹BP算法;D、共轭梯度算法训练函数3个:traincgp ()、traincgb()、trainscg();E、trainlm(),Levenberg-Marquardt训练算法。
(5)学习函数:A、learngd (),梯度下降法学习函数;B、learnbpm(),利用动量规则改进的BP算法。
(6)sim (),网络仿真函数。
(7)函数具体用法可参考帮助,或在命令窗口输入:help 函数名,如help learnbpm,回车即可。
2、缺省训练参数及训练参数设置方法(1)缺省训练参数net.trainParam.epochs=10net.trainParam.goal =0net.trainParam.lr=0.01net.trainParam.lr_inc=1.05 Ratio to increase learning ratenet.trainParam.lr_dec=0.7 Ratio to decrease learning ratenet.trainParam.max_fail=5 Maximum validation failuresnet.trainParam.max_perf_inc=1.04 Maximum performance increasenet.trainParam.min_grad=1e-10 Minimum performance gradientnet.trainParam.show=25net.trainParam.time=inf Maximum time to train in seconds(2)训练参数设置方法在m文件中编写上述相关设置命令,等号的右侧直接给出设置的训练参数即可。