logo资料库

神经网络实验报告.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
神经网络实验报告 一、实验目的和任务 1、掌握产生实验数据的方法; 2、掌握“时钟”的使用方法,记录程序运行时间; 3、掌握评估神经网络学习效果的指标方法; 4、模拟神经元模型,理解其工作原理; 5、模拟感知机网络,用 hebbu 规则和 BP 算法训练神经网络,用实验数据测 试两种算法学习效果的差异; 6、构建两层自组织映射(SOM)神经网络、两层 ART 神经网络或两层 hopfield 神经网络,并进行测试分析,比较不同网络的差异。 二、实验工具和方法 借助软件 MATLAB(R2009a)及其神经网络工具箱 Neural Network Toolbox Version 6.0.2 进行实验的仿真和测试。 三、实验过程 1、实验数据的产生: 假设噪声数据服从均值为 0,方差为 1 的正态分布。首先在变量论域产生 100 个随机数,并利用函数表达式分别计算其相应函数值,最后分别叠加噪声数据, 得到与变量对应的 100 个实验数据。 (1) 函数数据的产生: 使用 MATLAB 生成均匀随机数的函数 rand(m,n),可生成在 m 行 n 列的在(0,1) 之间符合均匀分布的随机数。 x0=rand(1,100); x=100*x0; 如此可生成在变量论域(0,100)之间的 100 个符合均匀分布的随机数。 假如用来生成实验数据的函数为 y  2 x  sin x ,输入: y1=x.^2+sin(x) 即可得到所需的函数数据。 (2) 噪声数据的产生 由于噪声数据服从均值为 0,方差为 1 的正态分布,使用 MATLAB 函数
randn(m,n),可生成在 m 行 n 列的在(0,1)之间符合要求的随机数。 y2=randn(1,100) (3) 生成实验数据 将实验数据和噪声数据叠加: y=y1+y2 2、“时钟”的使用方法 在编写 MATLAB 代码的时候,经常需要获知代码执行的实际时间,这就这 程序中用到即使函数。MATLAB 里提供了 cputime,tic/toc,etime 三种方法。 (1) cputime 方法 返回 MATLAB 启动以来的 CPU 时间,可以在程序代码执行前保存当时的 CPU 时间,然后在程序代码执行结束后用 cputime 减去之前保存的数值,就可以 获取程序实际运行的时间。 (2) tic/toc 方法 tic 用在程序代码首部,启动一个计时器;toc 放在程序代码末尾,终止计时 器并返回 tic 启动以来的总时间。 (3) etime 方法 etime(t1,t2)用来计算两个日期向量 t1,t2 之间的时间差。 3、神经网络性能的评价 使用 MATLAB 的性能函数 mae。该函数以平均绝对误差为准则来确定神经 网络的性能。 4、单个神经元的模拟
如图所示为有偏置的神经元模型,据其结构编制如下程序仿真其性能。 function [u y]=mnshjy(x) w=[0.3 -0.5 0.4]; u=w*x; if u>=1 y=logsig(u); end if u<1 y=0; end 在上述程序中,我们去取权值向量为: w  (0.3 0.5 0.4)  取阈值为: 1 激活函数取为 logsig(对数 S 形函数),可取为 purelin(线性函数),tansig (正切 S 形函数),hardlim(硬限幅函数)等等。 5、感知机网络的模拟(采用 BP 算法) 构建一个两层的感知机网络,激活函数均选为 logsig(对数 S 形函数),编 制如下程序进行仿真。 tic a1=randn(1,90); a2=100*rand(1,90); y10=2*a2+3; y20=a2.^2+sin(a2); y1=y10+a1; y2=y20+a1; p=[y1;y2]; pr=minmax(p); goal=[ones(1,90);zeros(1,90)]; plot(a2,y1,'h',a2,y2,'o') net=newff(pr,[3,2],{'logsig','logsig'}); net.trainParam.show = 10; net.trainParam.lr = 0.05; net.trainParam.goal = 1e-10; net.trainParam.epochs = 50000; net = train(net,p,goal); y0=sim(net,p); err0=mae(y0,goal); toc
上述程序,采用前述方法生成 90 个实验数据,将这些数据用于神经网络的 训练,并记录程序运行时间,并对神经网络性能作出评价。 下面的程序可以生成 10 个新的实验数据,用来测试前面产生的神经网络的 性能。 b1=randn(1,10); b2=100*rand(1,10); y10=2*b2+3; y20=b2.^2+sin(b2); h1=y10+b1; h2=y20+b1; c=[h1;h2]; r=sim(net,c); t=[ones(1,10);zeros(1,10)]; err=mae(r,t); 如下为仿真过程中得到的图像,包括每一次运算的误差,训练状态等。
程序执行时间为 0.558756 seconds 误差为 0.5000 用测试数据分析,实现了准确的分类。 将激活函数取为 tansig(正切 S 形函数)后,所得结果如下: 程序执行时间为 59.905634 seconds 6、竞争型网络的模拟 在前述前馈误差方向传播网络的基础上,采用竞争型(LVQ)网络。得到的
仿真结果如下: 程序执行时间为 14.410639 用测试数据分析,分类是有误差。 7、自组织映射(SOM)网络的模拟 构建一个两层的自组织映射网络,程序如下: tic a1=randn(1,90); a2=100*rand(1,90); y10=2*a2+3; y20=a2.^2+sin(a2); y1=y10+a1; y2=y20+a1; p=[y1;y2]; net=newsom([0 2;0 1],[3 5]); plotsom(net.layers{1}.positions); net.trainParam.epochs=10; net=train(net,p); plot(a2,y1,'h',a2,y2,'o'); hold on; plotsom(net.iw{1,1},net.layers{1}.distances); hold off; figure; net=init(net); net.trainParam.epochs=20; net=train(net,p);
plotsom(net.iw{1,1},net.layers{1}.distances); toc 程序执行时间为 10.375700 四、实验结论 1、对于前馈反向传播网络,激活函数采用 logsig(对数 S 形函数),purelin (线性函数),tansig(正切 S 形函数)均可以实现网络的训练,只是训 练需要的时间不同。 2、对于前馈反向传播网络和竞争型网络,在分类这个问题上,竞争型网络 的效果并不是很好。根据查到的资料,该网络更适合作聚类分析。
分享到:
收藏