实验一感知器网络的训练及应用.docx
- 文档编号:5839717
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:29
- 大小:740.64KB
实验一感知器网络的训练及应用.docx
《实验一感知器网络的训练及应用.docx》由会员分享,可在线阅读,更多相关《实验一感知器网络的训练及应用.docx(29页珍藏版)》请在冰豆网上搜索。
实验一感知器网络的训练及应用
智
能
信
息
处
理
技
术
基
础
实
验
报
告
专业班级
电子信息工程1001班
学生
新南
学生学号
1012140123
指导教师
周春临
实验一感知器网络的训练与应用
一、实验目的
1、掌握感知器网络的基本概念及训练方法; 2、掌握感知器网络的基本使用;
3、掌握利用Matlab对感知器网络进行构建与实现的方法。
二、实验原理
1、感知器网络模型
(1)感知器网络模型的拓扑结构如图1所示:
(2)感知器网络模型学习算法
a、初始化:
赋予权值一个较小的随机值错误!
未找到引用源。
(非零值);
b、将第错误!
未找到引用源。
个模式错误!
未找到引用源。
送入输入神经元,并给出理想输出值错误!
未找到引用源。
;
c、计算神经元网络模型的实际输出错误!
未找到引用源。
;
d、根据错误!
未找到引用源。
与错误!
未找到引用源。
计算第错误!
未找到引用源。
条连线的权值增量:
e、转b,选取第个样本,直到学完所有输入样本; f、按式
g、若,转到b,否则结束。
三、实验容
1、利用Matlab对感知器网络进行构建与实现
(1)Percept1(简单分类问题):
设计单一感知器神经元来解决一个简单的分类问题:
将4个输入向量分为两类,其中两个输入向量对应的目标值为1,另两个对应的目标值为0,输入向量为:
P=[-2 -0.9 0.5 -0.5; -0.2 0.8 -0.6 2.0],目标向量为:
T=[1 0 1 0],
源程序如下:
P=[-2 -0.9 0.5 -0.5; -0.2 0.8 -0.6 2.0]; T=[1 0 1 0]; plotpv(P,T); pause;
net=newp([-1 1; -1 1],1); watchon; cla;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1}); E=1;
net=init(net);
linehandle=plotpc(net.IW{1},net.b{1}); while(sse(E))
[net,Y,E]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1}); drawnow; end; pause; watchoff; p=[0;-0.5]; a=sim(net,p); plotpv(p,a);
ThePoint=findobj(gca,'type','line'); set(ThePoint,'Color','red'); hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1}); hold off;
disp('End of percept1'); 运行结果如下图所示:
(2)Percept2(多个感知器神经元的分类问题):
将上例的输入向量扩充为10组,将输入向量分为4类,即输入向量为:
P=[0.6 0.7 0.9 0.9 1.7 0.0 0.4 -0.7 -0.4 -1.5; 1.6 1.8 1.6 0.7 0.8 0.6 0.5 0.9 -1.0 -1.3],目标向量为:
T=[1 1 1 0 0 1 1 1 0 1; 0 0 0 0 0 1 1 1 1 1],
源程序如下:
P=[0.6 0.7 0.9 0.9 1.7 0.0 0.4 -0.7 -0.4 -1.5; 1.6 1.8 1.6 0.7 0.8 0.6 0.5 0.9 -1.0 -1.3];
T=[1 1 1 0 0 1 1 1 0 1; 0 0 0 0 0 1 1 1 1 1];
plotpv(P,T);
net=newp([-1.5 1;-1.5 1],2);
figure;
watchon;
cla;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
E=1;
net=init(net);
linehandle=plotpc(net.IW{1},net.b{1});
while(sse(E))
[net,Y,E]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
drawnow; end;
watchoff; figure;
p=[0.7;1.2]; a=sim(net,p); plotpv(p,a);
ThePoint=findobj(gca,'type','line');
set(ThePoint,'Color','red');
hold on; plotpv(P,T);
plotpc(net.IW{1},net.b{1});
hold off;
disp('End of percept2');
运行结果如下图所示:
(3) Percept3(输入奇异样本对网络训练的影响)当网络的输入样本中存在奇异样本时(即该样本向量相对其他所有样本向量特别大或特别小),此时网络训练时间将大大增加,如输入向量为:
P=[-0.7 -0.5 0.6 -0.1 -40; -0.6 0.7 -0.5 1.0 60],目标向量为:
T=[1 1 0 1 1],
源程序如下:
P=[-0.7 -0.5 0.6 -0.1 -40;
-0.6 0.7 -0.5 1.0 60];
T=[1 1 0 1 1];
plotpv(P,T);
net=newp([-40 1; -1 50],1);
pause;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
cla;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
E=1;
net.adaptParam.passes=1 net=init(net);
linehandle=plotpc(net.IW{1},net.b{1});
while(sse(E))
[net,Y,E]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
drawnow; end; pause;
p=[0.7;1.2];
a=sim(net,p);
plotpv(p,a);
ThePoint=findobj(gca,'type','line');
set(ThePoint,'Color','red'); hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1});
hold off;
pause;
axis([-2 2 -2 2]);
disp('End of percept3');
运行结果如下图所示:
在上述网络中由于样本向量相对其他所有样本向量特别大或特别小,故网络训练时间将大大增加,为解决此问题只需用标准化感知器学习规则训练即可大
大缩短训练时间。
原始感知器学习规则的权值调整为:
标准化感知器学习规则的权值调整为:
编写源程序如下:
P=[-0.6 -0.8 0.5 -0.5 -40; -0.5 0.5 -0.5 1.3 50];
T=[1 1 0 0 1]; plotpv(P,T);
pause;
net=newp([-40 1; -1 50],1,'hardlim','learnpn');
cla;
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
E=1;
net.adaptParam.passes=1;
net=init(net);
linehandle=plotpc(net.IW{1},net.b{1});
while(sse(E))
[net,Y,E]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
drawnow;
end;
pause;
p=[0.7;1.2];
a=sim(net,p);
plotpv(p,a);
ThePoint=findobj(gca,'type','line');
set(ThePoint,'Color','red');
hold on;
plotpv(P,T);
plotpc(net.IW{1},net.b{1});
hold off;
pause;
axis([-2 2 -2 2]);
disp('End of percept4');
采用标准化感知器学习规则训练的运行结果如下图所示:
(4)Percept5(线性不可分的输入向量)定义向量,输入向量为:
P=[-0.5 -0.5 0.3 -0.1 -0.8; -0.5 0.5 -0.5 1.0 0.0]; 输出向量为:
T=[1 1 0 0 0];
源程序如下:
P=[-0.8 -0.5 0.3 0 -0.8;
-0.1 0.5 -0.5 1.0 0.0];
T=[1 1 0 1 0]; plotpv(P,T);
net=newp([-1 1; -1 1],1);
plotpv(P,T);
linehandle=plotpc(net.IW{1},net.b{1});
pause;
for a=1:
25
[net,Y,E]=adapt(net,P,T);
linehandle=plotpc(net.IW{1},net.b{1},linehandle);
drawnow;
end;
运行结果如下图所示:
四、实验心得
单层感知器仅对线性可分问题具有分类能力故具有一定的局限性,由于它的结构与功能都比较简单,所以在解决实际问题时很少被采用,但在神经网络中具有重要意义,是研究其他网络的基础,而且较容易学习和理解,适合与作为学习神经网络的起点。
在输入奇异样本时,采用标准化感知器学习规则训练即可大大缩短训练时间。
实验二BP网络的训练与应用
一实验目的:
1.理解基于BP网络的多层感知器的工作原理
2.通过调节算法参数的了解参数的变化对BP多层感知器训练的影响
3.了解BP多层感知器的局限性
二实验容:
1.根据实验容推导出输出的计算公式以及误差的计算公式
2.使用Matlab编程实现BP多层感知器
3.调节学习率η及隐结点的个数,观察对于不同的学习率、不同的隐结点个数时算法的收敛速度
4.改用批处理的方法实验权值的收敛,并加入动量项来观察批处理以及改进的的算法对结果和收敛速度的影响。
三.实验原理以及过程的推导
1.基本BP算法的多层感知器模型
下面所示是一个单输入单输出的BP多层感知器的模型,它含有一个隐层。
下面对误差和权值的调整过程进行推导对于单样本的输入Xi则隐层的输出:
yi=f1(netj);
netj=(xi*vi)
输出层的输出:
O=f2(net);
net=(wi*yi)
变换函数:
f1=
f2=x;
当网络输出与期望输出不等时,存在输出误差E
E=
(d-o)2;
计算各层的误差:
把误差分配到各层以调整各层的权值,所以,各层权值的调整量等于误差E对各权值的负偏导与学习率的乘积,计算得到对权值W和权值V的调整量如下:
将上面的式子展开到隐层得:
E=
(d-o)2=
[d-f2(net)]=
[d-f2(
)]
将上式展开到输入层得:
E=
(d-o)2=
[d-f2(net)]=
[d-f2(
f1(
))]
调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即
Δwj=-
Δvj=-
计算得到对各权值的调整为:
Δwj=η*(d(1,p)-o(1,p))*y(1,i)
Δvj=*(d(1,p)-o(1,p))*w(1,i)*y(1,i)*(1-y(1,i))*x(1,p)
其中P为第P个样本:
四实验步骤
Step1初始化
对权值矩阵W、V赋随机数,将样本模式计数器p和训练次数计数器q置于1,误差E置0,学习率η设为0~1的小数,网络训练后的精度Emin设为一个正的小数;
Step2输入训练样本对,计算各层输出用当前样本Xp、dp对向量数组X、d赋值,用下式计算Y和O中各分量
yi=f1(netj);
netj=(xi*vi)
O=f2(netj);
net=(wi*yi)
Step3计算网络输出误差
设共有P对训练样本,网络对于不同的样本具有不同的误差2
Step4计算各层误差信号:
各层的误差信号为误差E对各层权值的偏导
Step5调整各层权值
Δw=η*(d(1,p)-o(1,p))*y(1,i)
Δv=*(d(1,p)-o(1,p))*w(1,i)*y(1,i)*(1-y(1,i))*x(1,p)
Step6检查是否对所有样本完成一次轮训
若p
Step7检查网络总误差是否达到精度要求
当用ERME作为网络的总误差时,若满足ERME 单样本训练: 每输入一个样本,都要回传误差并调整权值,会导致收敛速度过慢 批处理(Batch)训练: 根据总误差,计算各层的误差信号并调整权值,在样本数较多时,批训练比单样本训练时的收敛速度快 五实验结果 对于单本输入的网络程序如下: functionlimoyan;%建立以limoyan为文件名的m文件 clc; clear; x=[-4: 0.08: 4];%产生样本 j=input('j=');%输入隐结点的个数 n=input('n=');%输入学习率 w=rand(1,j);%对权值w赋较小的初值 w0=0.5;%对权值w0赋较小的初值 v=rand(1,j);%对权值V赋较小的初值 v1=rand(1,j);%对权值V1赋较小的初值 x0=-1;%对阈值x0赋初值 y0=-1;%对阈值y0赋初值 err=zeros(1,101); wucha=0; erro=[]; Erme=0; zong=[]; Emin=0.1; d=zeros(1,101);%以初值0赋给期望输出 form=1: 101 d(1,m)=1.1*(1.0-x(1,m)+2*x(1,m)*x(1,m))*exp(-x(1,m)*x(1,m)/2);%以Hermit多项式产生期望输出 end; o=zeros(1,101); netj=zeros(1,j); net=zeros(1,j); y=zeros(1,j); p=1; q=1; whileq<30000%设定最大的迭代交数 forp=1: 101%计算隐层的输出 fori=1: j netj(1,i)=v(1,i)*x(1,p)+v1(1,i)*x0; y(1,i)=1/(1+exp(-netj(1,i))); end; o(1,p)=w*y'+y0*w0+0.01*randn(1,1);%计算输出并给输出加上上定的扰动 wucha=1/2*(d(1,p)-o(1,p))*(d(1,p)-o(1,p));%计算误差 err(1,p)=wucha; erro=[erro,wucha]; form=1: j;%调整各层的权值 w0=w0-n*w0; w(1,m)=w(1,m)+n*(d(1,p)-o(1,p))*y(1,m); v(1,m)=v(1,m)+n*(d(1,p)-o(1,p))*w(1,m)*y(1,m)*(1-y(1,m))*x(1,p); v1(1,m)=v1(1,m)+n*(d(1,p)-o(1,p))*w(1,m)*y(1,m)*(1-y(1,m))*x0; end; q=q+1; end; Erme=0; fort=1: 101; Erme=Erme+err(1,t); end; err=zeros(1,101); Erme=sqrt(Erme/101); zong=[zong,Erme]; ifErme end; end;%输入结果 Erme plot(x,d,'-r'); holdon; plot(x,o,'-.b'); xlabel('Hermit多项式曲线与所构建BP网络输出曲线') q figure (2); plot(zong); xlabel('误差的收敛曲线') 命令窗口的输出如下: j=5 n=0.05 Erme=0.0996 q=19999 Hermit多项式曲线与所构建BP网络输出曲线: 误差的收敛曲线如下: 单样本训练的统计如下: 0.05 0.07 0.1 0.12 0.15 0.17 5 0.09360 0.08659 0.09784 0.09364 0.08725 0.09324 8 0.09921 0.08921 0.09458 0.09125 0.08457 0.09478 10 0.8925 0.08794 0.08527 0.09145 0.08412 0.09147 12 0.09784 0.09258 0.08796 0.09158 0.07836 0.08397 对于批处理的情况: 在原程序的基础上改变中间的一段; 命令窗口的输出如下: j=10 n=0.1 Erme=0.0997 q=15757 Hermit多项式曲线与所构建BP网络输出曲线: 误差的收敛曲线如下: 单样本训练的统计如下: 0.05 0.07 0.1 0.12 0.15 0.17 5 0.09906 0.09587 0.09457 0.09096 0.09914 0.09874 7 0.09258 0.09105 0.09267 0.09158 0.09457 0.09547 10 0.08942 0.09324 0.09128 0.08457 0.09217 0.09527 12 0.08596 0.08925 0.08759 0.09154 0.08247 0.09457 对于加入动量项的网络如下: 命令窗口的输出如下: j=15 n=0.1 Erme=0.1000 q=6768 Hermit多项式曲线与所构建BP网络输出曲线: 误差的收敛曲线如下: 单样本训练的统计如下: 0.05 0.07 0.1 0.12 0.15 0.17 5 0.09657 0.09578 0.09654 0.098354 0.09824 0.09047 8 0.09658 0.09368 0.09342 0.09648 0.09427 0.09153 10 0.09257 0.09457 0.09231 0.09426 0.09547 0.08972 12 0.09258 0.9215 0.09127 0.09238 0.09341 0.08931 六.问题回答 1.比较单样本训练和批处理训练的区别; 答: 单样本输入是每输入一个样本就调整一次权值,并计算误差的大小,而对于批处理来说,是等所有的样本都输入以后再调整权值.当样本较多的时候批处理能获得较快的收敛速度. 2.根据结果分析增加动量项后算法的变化 答: 加入动量项后,就等于让权值的收敛方向向着一定的方向进行,由输出的数据可以看出这一点,对于相同的结点数,相同的学习率,加入动量项后,收速度即迭代次数明显的降低. 3.改变不同参数的BP网络运行情况及结果,并给予相应的结果分析 答: 改变不同参数,对网络运行情况的影响,可以概括为: 随着结点数的增多,收敛的概率和速度都会相应的有把增加.相应的误差会要小一点.但误差的大小除了取决于结点外,还主要决定于到达允许误差时的值,所以总误差的值有一定的随机性.对于改变网络的学习率,对来说小的学习率会使收敛更稳定一点,但是速度也会相对地慢一点,大的学习率在一定程度上能加快收敛的速度,但是稳定性要比小的学习率小的多,换句话说,大的学习率收敛的概率要小得多,很容易发散,所以说,随着学习的增大,迭代的次数会先减小后增大。 大到一定程度进,由于波动太大。 结果就不在收敛。 4.思考: 输出层可以采用Sigmoid函数吗? 为什么? 答: 输出层可以采用的函数很多,从理论上说,一个函数都是可以应用的,但是如果采用Sigmoid函数的话,占用的存要比用线性函数大的多,相对的运行的速度也要比用线性函数慢的多,而对于连续的函数的拟合,输出函数用线性函数就能很好的解决。 5.试验中遇到的问题和解决方法? 答: 在开始的时候把问题想得太简单,在没有加阈值的情下编出了程序,运行后才发现,结点数很多,想明白后再阈值加上使程序显得混乱。 实验三SOM模型的训练与应用 一、实验目的: 1、 熟悉MATLAB中SOM神经网络工具箱的使用方法; 2、 了解SOM神经网络各种优化算法的原理; 3、 掌握SOM神经网络各种优化算法的特点; 4、 掌握使用SOM神经网络各种优化算法解决实际问题的方法。 二、实验容: 从网络结构上来说,SOM网络最大的特点是神经元被放置在一维、二维或者更高维的 网格节点上。 下图就是最普遍的自组织特征映射二维网格模型。 SOM网络的一个典型特性就是可以在一维或二维的处理单元阵列上,形成输入信号的 特征拓扑分布,因此SOM网络具有抽取输入信号模式特征的能力。 SOM网络一般只包含有一维阵列和二维阵列,但也可以推广到多维处理单元阵列中去。 下面只讨论应用较多的二维阵列。 输入层是一维的神经元,具有N个节点,竞争层的神经元处于二维平面网格节点上, 构成一个二维节点矩阵,共有M个节点。 输入层与竞争层的神经元之间都通过连接权值进行连接,竞争层临近的节点之间也存在着局部的互联。 SOM网络中具有两种类型的权值,一种是神经元对外部输入的连接权值,另一种是神经元之间的互连权值,它的大小控制着神经元之间相互作用的强弱。 在SOM网络中,竞争层又是输出层。 SOM网络通过引入网格形成了自组织特征映射的输出空间,并且在各个神经元之间建立了拓扑连接关 系。 神经元之间的联系是由它们在网格上的位置所决定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 感知 网络 训练 应用