神经元感知机算法.docVIP

  • 13
  • 0
  • 约1.64千字
  • 约 4页
  • 2017-06-02 发布于河南
  • 举报
神经元感知机算法

计算智能作业 ZY1203212 王虎 神经元感知机调整的学习算法 一、 算法目标 通过建立关于点坐标的线性函数,即f(x)=f(w1*x1+w2*x2+c), 将集合set1={(0,1),(0,2),(1,1)}和Set2{(2,0),(3,0),(3,1)}在坐标系下分离开来。 二、 算法描述 Step1:初始化权值w1,w2,和c Step2:在集合s1或s2中任选一个点,作为感知机的输入,计算实际输出; Step3:对Step2的输出结果进行检验,若分类正确,则权值不做调整,若分类错误,则按Step4方法进行调整。 Step4:设n0为当前迭代次数,调整算法为 w1(n0+1)= w1(n0)+2*m*[fs-fp]*x1(n0); w2(n0+1)= w2(n0)+2*m*[fs-fp]*x2(n0); Step5:重复选取样本,直到权值使得所有点满足 三、 实验代码 本实验在visua stdio环境下编写实现程序,如下: #includestdio.h #includeWindows.h int step(float(x)) { int s; if(x0) s=0; else s=1; return(s); } void main() { float a[3][2]={0,1,0,2,1,1}; float b[3][2]={2,0,3,0,3,1}; float w1=20,w2=83,c=1,m=0.6; float x; inti,j; unsignedint counter=0; while(1) { for(j=0;j2;j++) { if(j==0) { for(i=0;i3;i++) { x=w1*a[i][0]+w2*a[i][1]+c; if(step(x)==0) counter++; else { w1=w1+2*m*(0-1)*a[i][0]; w2=w2+2*m*(0-1)*a[i][1]; c=c+2*m*(0-1)*1; counter=0; printf(w11=%6.2f w21=%6.2f c1=%6.2f\n,w1,w2,c); } } } else { for(i=0;i3;i++) { x=w1*b[i][0]+w2*b[i][1]+c; if(step(x)==1) counter++; else { w1=w1+2*m*(1-0)*b[i][0]; w2=w2+2*m*(1-0)*b[i][1]; c=c+2*m*(1-0)*1; counter=0; printf(w12=%6.2f w22=%6.2f c2=%6.2f\n,w1,w2,c); } } } } if(counter=6) { printf(w1s=%6.2f w2s=%6.2f cs=%6.2f\n,w1,w2,c); break; } } Sleep(60000); } 四、 实验结果 (1)w1=20,w2=83,c=0.6 (2) w 1=2,w2=8,c=0.6 (3) w1=-2,w2=8,c=0.6 五、 结果分析 当权值选不同的初值时,对程序运行次数有很大的影响。如果初值选择不当,可能会陷入到无限循环中。其次数值的大小的选择,对程序的运算速度也会造成一定影响。

文档评论(0)

1亿VIP精品文档

相关文档