智能计算第一次作业hs.doc

上传人:scccc 文档编号:11230396 上传时间:2021-07-15 格式:DOC 页数:13 大小:48.50KB
返回 下载 相关 举报
智能计算第一次作业hs.doc_第1页
第1页 / 共13页
智能计算第一次作业hs.doc_第2页
第2页 / 共13页
智能计算第一次作业hs.doc_第3页
第3页 / 共13页
智能计算第一次作业hs.doc_第4页
第4页 / 共13页
智能计算第一次作业hs.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《智能计算第一次作业hs.doc》由会员分享,可在线阅读,更多相关《智能计算第一次作业hs.doc(13页珍藏版)》请在三一文库上搜索。

1、智能计算第一次作业数学科学学院计算0804黄爽200811130感知器线性可分与不可分以及收敛性的讨论一. 问题描述:由感知器的输入/输出的关系可知,感知器的输出只有1或0两个状态,其他值由W*P+b的值大于、等于或小于零来确定。当网络权值W和b确定后,在由各输入矢量Pj(j=1,2,.,r)为坐标轴所组成的输入矢量空间里,可以画出W*P+b=0的轨迹,对于任意给定的一组输入矢量P,当通过感知器网络的权值W和b的作用,活落在输入空间W*P+b=0的轨迹上或落在上部或下部。为此,感知器能够线性的将输入矢量进行分类,如果用一条直线或者一个平面把一组输入的矢量正确的划分期望的类别,则称该输入的矢量是

2、线性可分的。单层感知器对线性可分和不可分有很好的效果。二:算法理论:感知器是最早的人工神经网络模型。感知器对单个神经元建模,如果输入的加权和大于某个可调整的阈值就输出1,否则输出0,此即文提到的生物脉冲。图四中,输入信号(x1,x2,x3.xm)和联接权值(w1,w2,w3.wm)通常是实数值,可正可负。若xi趋向于使感知器激活,则权值wi为正值,反之为负值。感知器本身由权值,加法器,激活函数以及可调阈值(以下称偏置)组成。通常为了方便起见,将偏置也作为一个输入信号。单层神经网络(感知器网络)的输出单元是相互独立的-每个权值仅影响一个输出。感知器网络能用来解决线性分类问题。感知器的学习规则:是

3、用来计算新的权值矩阵W及新的偏差B的算法,感知器利用其学习规则来调整网络权值,以便使该网络对输入矢量的响应达到数值为0或1的目标输出。感知器的训练规则:在输入矢量P的作用下,计算网络的实际输出A,并与相应的的目标矢量T进行比较,检查A是否等于T,然后用比较后的误差E,根据学习规则进行权值和偏差的调整;重新计算网络在新权值作用下的输入,重复权值调整过程,直到网络的输出A等于目标矢量T或训练次数达到事先设置的最大值时训练结束。若网络训练成功,那么训练后的网络在网络权值的作用下,对于被训练的每一组输入矢量都能够产生一组对应的期望输出;若在设置的最大训练次数内,网络未能完成在给定的输入矢量P的作用下,

4、使A=T的目标,则可以通过改用新的初始权值与偏差,并采用更长训练次数进行训练,或分析一下所要解决的的问题是否属于那种由于感知器本身的限制而无法解决的一类,即线性不可分的。三求解步骤:1)对于所要解决的问题,确定输入矢量P,目标矢量T,并由此确定各矢量的维数以及确定网络结构大小的神经元数目:r,s,q2)参数初始化,a)赋给权矢量W在(-1,1)的随机非零初始值;b)给出最大训练循环次数;3)网络表达式:根据输入矢量P以及最新权矢量W,计算网络矢量A;4)检查:检查输出矢量A与目标矢量T是否相同5)调整权矢量四运行结果线性可分的程序及产生的图:程序一:p=4 -0.5 0.5 1 1.5 1 0

5、.5 2 2.5 -0.3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 3;t=0 1 1 1 1 1 0 0 0 0; %在坐标图上绘出样本点plotpv(p,t); %建立一个感知器网络net=newp(-1,1;-1,1,1);P = 4 -0.5 0.5 1 1.5 1 0.5 2 2.5 -0.3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 3;T = 0 1 1 1 1 1 0 0 0 0; % 初始化A = sim(net,P) % 训练前的网络输出net.trainParam.epochs = 20; % 定义最大循环次数net = train(ne

6、t,P,T); % 训练网络,使输出和期望相同net.iw1,1 % 输出训练后的网络权值net.b1 % 输出训练后的网络偏差A = sim(net,P) % 训练后的网络输出handle=plotpc(net.iw1,net.b1); %利用样本点训练网络并绘出得到的分类线E=1;while(sse(E);net,Y,E=adapt(net,p,t);handle=plotpc(net.iw1,net.b1,handle);end; %选择10个点来测试网络testpoints=4 -0.5 0.5 1 1.5 1 0.5 2 2.5 -0.3;1 -1 0.5 -1 -1.5 0.5 2

7、 1.5 1 3;a=sim(net,testpoints); %在坐标图上绘出网络的分类结果及分类线figure;plotpv(testpoints,a);plotpc(net.iw1,net.b1,handle);运行后的程序: p=-0.5 -0.5 0.5 1 1.5 1 0.5 2 2.5 3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 0.5;t=1 1 1 1 1 1 0 0 0 0; %在坐标图上绘出样本点plotpv(p,t); %建立一个感知器网络net=newp(-1,1;-1,1,1);P = -0.5 -0.5 0.5 1 1.5 1 0.5 2 2.5

8、 3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 0.5;T = 1 1 1 1 1 1 0 0 0 0; % 初始化A = sim(net,P) % 训练前的网络输出net.trainParam.epochs = 20; % 定义最大循环次数net = train(net,P,T); % 训练网络,使输出和期望相同net.iw1,1 % 输出训练后的网络权值net.b1 % 输出训练后的网络偏差A = sim(net,P) % 训练后的网络输出handle=plotpc(net.iw1,net.b1); %利用样本点训练网络并绘出得到的分类线E=1;while(sse(E);n

9、et,Y,E=adapt(net,p,t);handle=plotpc(net.iw1,net.b1,handle);end; %选择10个点来测试网络testpoints=-0.5 -0.5 0.5 1 1.5 1 0.5 2 2.5 3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 0.5;a=sim(net,testpoints); %在坐标图上绘出网络的分类结果及分类线figure;plotpv(testpoints,a);plotpc(net.iw1,net.b1,handle);A = 1 1 1 1 1 1 1 1 1 1ans = -0.5000 -0.5000an

10、s = 1A = 1 1 1 1 1 1 0 0 0 0 p=4 -0.5 0.5 1 1.5 1 0.5 2 2.5 -0.3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 3;t=0 1 1 1 1 1 0 0 0 0; %在坐标图上绘出样本点plotpv(p,t); %建立一个感知器网络net=newp(-1,1;-1,1,1);P = 4 -0.5 0.5 1 1.5 1 0.5 2 2.5 -0.3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 3;T = 0 1 1 1 1 1 0 0 0 0; % 初始化A = sim(net,P) % 训练前的网络输出n

11、et.trainParam.epochs = 20; % 定义最大循环次数net = train(net,P,T); % 训练网络,使输出和期望相同net.iw1,1 % 输出训练后的网络权值net.b1 % 输出训练后的网络偏差A = sim(net,P) % 训练后的网络输出handle=plotpc(net.iw1,net.b1); %利用样本点训练网络并绘出得到的分类线E=1;while(sse(E);net,Y,E=adapt(net,p,t);handle=plotpc(net.iw1,net.b1,handle);end; %选择10个点来测试网络testpoints=4 -0.

12、5 0.5 1 1.5 1 0.5 2 2.5 -0.3;1 -1 0.5 -1 -1.5 0.5 2 1.5 1 3;a=sim(net,testpoints); %在坐标图上绘出网络的分类结果及分类线figure;plotpv(testpoints,a);plotpc(net.iw1,net.b1,handle);A = 1 1 1 1 1 1 1 1 1 1ans = -1.0000 -2.5000ans = 4A = 0 1 1 1 1 1 0 0 0 0程序二:% percep3.m%P = -0.5 0 0.3 0 -0.3 0 0.3 0.4 0.3 0;0 0.5 -0.5 1

13、 0 0 0.3 -0.5 0.2 1;T = 0 1 0 0 0 0 0 1 1 0;V = -2 2 -2 2;net = newp(minmax(P),1,hardlim,learnp); % 创建一个感知器网络net.inputweights1,1.initFcn = rands; % 赋输入权值的产生函数net.biases1.initFcn = rands; % 赋偏差的产生函数net = init(net); % 初始化网络W0 = net.iw1,1B0 = net.b1A = sim(net,P); % 计算网络输出net.trainParam.epochs = 40;net

14、 tr = train(net,P,T); % 训练网络权值 W = net.iw1,1;B = net.b1;pause %看前面的网络训练结果图形,按任意键继续plotpv(P,T,V);hold on plotpc(W0,B0) %做出分类线的曲线plotpc(W,B)hold offfprintf (n Final Network Values : n )WBfprintf(Tained for %.0f epochs,max(tr.epoch);fprintf(nNetwork classifies:);if all ( hardlim ( W*P + B ) = T ) disp

15、(Correctly. )else disp (Incorrectly. )end运行完的程序: % percep3.m%P = -0.5 0 0.3 0 -0.3 0 0.3 0.4 0.3 0;0 0.5 -0.5 1 0 0 0.3 -0.5 0.2 1;T = 0 1 0 0 0 0 0 1 1 0;V = -2 2 -2 2;net = newp(minmax(P),1,hardlim,learnp); % 创建一个感知器网络net.inputweights1,1.initFcn = rands; % 赋输入权值的产生函数net.biases1.initFcn = rands; %

16、赋偏差的产生函数net = init(net); % 初始化网络W0 = net.iw1,1B0 = net.b1A = sim(net,P); % 计算网络输出net.trainParam.epochs = 40;net tr = train(net,P,T); % 训练网络权值 W = net.iw1,1;B = net.b1;pause %看前面的网络训练结果图形,按任意键继续plotpv(P,T,V);hold on plotpc(W0,B0) %做出分类线的曲线plotpc(W,B)hold offfprintf (n Final Network Values : n )WBfpri

17、ntf(Tained for %.0f epochs,max(tr.epoch);fprintf(nNetwork classifies:);if all ( hardlim ( W*P + B ) = T ) disp (Correctly. )else disp (Incorrectly. )endW0 = 0.0938 0.9150B0 = -0.4430 Final Network Values : W = 2.6938 -1.1850B = 0.5570Tained for 40 epochsNetwork classifies:Incorrectly.五:程序结果分析:由程序一的运行结果可知,对于给定输入矢量所设计出的单层感知器,只对一部分输出功能是线性可分的。关于程序二,我们可以发现,随着输入矢量数的增加,线性不可分的功能数急剧增加。因此,给定一个输入或输出矢量对时,首先必须判别该功能是否是线性可分的。当输入矢量增多时,更难以确定,一般只有通过用一定的循环次数对网络进行训练而判断它是否能被线性可分。所以,单层神经元感知器只能用于简单的分类问题。因此我们应该寻找更好的方法来解决这个问题。(部分内容摘抄自MATLAB工具箱的神经网络理论与应用程序源代码 丛爽编,国科学技术大学出版社)

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1