《使用MATLAB编写单层感知器》由会员分享,可在线阅读,更多相关《使用MATLAB编写单层感知器(7页珍藏版)》请在金锄头文库上搜索。
1、采用感知器学习规则,训练步骤如下:Step1:对各权值w0j(O),w2j(0),,wnj(0),j=l,2,m(m为计算层的节点数)赋予较小的非零随机数,设置p=l;Step2:输入样本对Xp,dp,其中Xp=(-1,x1p,x2p,xnp),dp=(d1p,d2p,dnp)为期望的输出向量(教师信号),上标p表示样本对的模式序号,设样本总数为P,贝如=l,2,P;Step3:计算各节点的实际输出p()sgn(T()p),1,2,.,Step4:调整各节点对应的权值,(1)()pp()p.WtWtdotXjjjjn为学习率,用于控制调整速度,n值太大会影响训练的稳定性,太小则使训练的12(,
2、,)t输出层Ooooojm输入层inXYyyyy儿儿儿儿儿012(,)t单层感知器模型ooo1jm,.WWW1jm收敛速度变慢,一般取oM=1,2;3,4;M,M=1234M(1,:)%矩阵的第一行ans=12M(:,1)%矩阵的第一列ans=13M(:,1)=O0;%可单独操作一列一行或者一个元素(如M(l,l)=0;)MM=0204Err=;%Err初始为空Err=Err1;%加入新的元素Err=Err2;%再次加入Err=Err4;%向量的元素可以以这种方式不断增加ErrErr=124%Step3:感知器训练权值初始化设置阈值合并阈值与权值得到扩展权值从1到最大迭代次数,不断迭代计算每次
3、均依次输入样本14,由op-dp得到误差,计算新的权向量使用单极点二值变换函数10()00xfxx记录下每次调整后的权值每次迭代计算后,计算并记录总误差,如果总误差为0,则停止迭代%关于循环和矩阵运算和其他一些涉及到运算的例程:M=;fori=1:5M=M;i,i.A2;4endMM=112 43 94 165 25M.*M点乘ans=114169811625625625M%“”为转置运算ans=123451491625M*M%叉乘,ans=261220306 204272110124290156240207215627242030110240420650a=1:5;fori=1:5iifa(
4、i)=3,break,end%如果a(i)=3则跳出循环endi=11 =2i=3x=0.1;ifx=0f=1;5elsef=0;endf,f=1x=0.1;f=(x=0)%逻辑运算f=1x=-0.1;f=(x=0)f=0rand(l,5)%产生一个一行5列的随机数矩阵ans=0.l5760.97060.95720.48540.8003sum(l,2,3)%求和运算ans=6abs(-5)%绝对值运算ans=5%Step4:显示结果画出收敛曲线,即每次迭代后的总误差画出权值的变化曲线画出样本的分布和分界线wlxl+w2x2-T=0%关于结果显示和画图的例程figure%画图holdon%每次画
5、图都画在同一个图上,不覆盖gridon%显示网格x=l:l0;f=x.A2;plot(x,f,b-);%具体看helpplotaxis(0100120);%设置轴的范围xlabel(Inputx)%设置x轴的标签ylabel(Outputy)%设置y轴的标签disp(f=,num2str(f),)f=1491625364964811006012345678910020406080100120InputxOutputy%关于本题的显示示例:ThefinalErroris:0.ThecurrenEpochis:3.TheFinalWis:0.721570.48814TheFinalTis:0.8.
6、TheResultis:x1x2y000010100111024681012140.650.70.750.80.85W1024681012140.550.60.650.70.75W2权值的收敛曲线711.522.5300.10.20.30.40.50.60.70.80.91Epoch误差的收敛曲线-1-0.500.511.52-1-0.500.511.52InputxOutputy样本分布及分界线示意(4)保存文件通过菜单选择FileSave,或者点击左上角,或者使用快捷键Ctrl+S(5) 运行及调试程序点击上方,或者使用快捷键F5。针对提示的错误的位置修改程序,直到正确运行。*注意检查变量
7、矩阵的字母大小写,矩阵叉乘是否需要转置。(6) 存储图像在图上通过菜单选择FileSave,或者使用快捷键Ctrl+S再EditCopyFigure,将图粘贴到word上作为实验报告的依据。(7) 设置阈值T=0.1,改变学习率观察收敛曲线的收敛情况,对每个不同的学习率,分别运行程序10次,将所用迭代次数的平均值填入下表:学习率n0.010.050.10.51210迭代次数*提示:可以利用for循环直接接到该表结果(8) 设置学习率n=0.1,改变学习率观察收敛曲线的收敛情况,对每个不同的阈值T,分别运行程序10次,将所用迭代次数的平均值填入下表:阈值T0.010.050.10.51210迭代次数(9) 设置学习率n=0.1,设置阈值T=0.1,运行程序10次,记录下迭代次数平均值,再将变换函数改为单极点Sigmoid函数,再运行程序10次,记录下迭代次数平均值。变换_