logo资料库

模式识别 平时作业 基于BP算法的分类器设计.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
基于 BP 算法的分类器设计 一、实验目的 1.对模式识别有一个初步的理解。 2.能够根据自己的设计对 BP 决策理论算法有一个深刻地认识。 3.理解二类分类器的设计原理。 二、实验条件 MATLAB R2010b 三、实验原理 3.1 输出层神经元的权值修正算法(神经元 j) 由于权值的修正值ΔW 是通过梯度下降法求得的,因此要求出 。 的计算公式如下 = • • • 对等式右侧的分式分别求偏导数有 = (-1)φ' (vj(n)) =- φ' (vj(n)) 其中 vj(n)= =φ(vi(n)) 可以得到 Δ =η φ' (vj(n)) 若 =φ(vi(n))= ,则φ' (vj(n))= (1- ) 这样就得到了权值的修正值 1
Δ =η (1- ) 由此值修正权系数 。 3.2 隐含层神经元的权值修正算法(神经元 j) 仿照 3.1 求 。如图 5, 的计算公式如下: = • • 其中 vj(n)= = =φ' (vj(n))= (1- ) = = • =φ' (vk(n)) =- =- 故有 则权值的修正值 (φ' (vk(n)) ) ) =- =- ) φ' (vj(n)) Δ =η(- )= η 2
由此值修正权系数 。 四、实验内容 已知在二维平面上存在两条决策线,其方程为 = 以及 = ,ρ= 。可表示为 y=f(x)= = = ,其中 ρ= 。由这两条决策线构成了的非线性分类器可将空间中的三种不同性质 的物质分开。利用 BP 算法设计模型 f(x)。 首先考察隐含层为 4 个神经元的情形。任意选取 x1 与 x2 的值(此处各选取 20 个值)利用 MATLAB 画出原函数 f1 与 f2 的三维图形如图 1 所示。画出前向传 播神经网络图形如图 2 所示,用神经网络反向学习算法与此图去逼近模型,学习 矩阵为之前选取的 x1 与 x2 的 20 个值与其对应的 20 个输出值。 五、实验步骤 实验流程图 六、实验代码 3
%误差值 %学习步长 eta=0.06; e1=zeros(1,20); e2=zeros(1,20); sita=zeros(100,1); %误差矩阵 zeta=0; %误差初值 N=20; %学习矩阵的长度 x1=[-10.5 -9.8 -8.6 -7.4 -6.7 -5.5 -4.3 -3.1 -2.8 -1.9 1.2 2.7 3.5 4.3 5.1 6.2 7.9 8 9.9 10]; x2=[-10.5 -9.8 -8.6 -7.4 -6.7 -5.5 -4.3 -3.1 -2.8 -1.9 1.2 2.7 3.5 4.3 5.1 6.2 7.9 8 9.9 10];%输入矩阵 d1=zeros(1,20); d2=zeros(1,20);%真实值输出矩阵 y1=zeros(1,20); y2=zeros(1,20);%BP算法输出矩阵 for a=1:20 d1(a)=x1(a)*exp(-(x1(a)^2+x2(a)^2)); d2(a)=sin(2*(x1(a)^2+x2(a)^2))/(4*(x1(a)^2+x2(a)^2)); end W1=[1 -1 2 -2]'; W2=[2 1 3 -1]'; W3=[1 0 3 -1]'; W4=[0 3 2 -1]'; %初始权值 rou=0.03; times=1000; v1=zeros(4,1); v2=zeros(4,1); v3=zeros(4,1); v4=zeros(4,1); u1=zeros(4,1); u2=zeros(4,1); %误差衡量标准 %学习次数 4
o1=zeros(4,1); o2=zeros(4,1); o3=zeros(4,1); o4=zeros(4,1); %神经元上的值 for i=1:times for j=1:N for k=1:4 v1(j)=W1(1)*x1(j)+W2(1)*x2(j); o1(j)=logsig(v1(j)); v2(j)=W1(2)*x1(j)+W2(2)*x2(j); o2(j)=logsig(v2(j)); v3(j)=W1(3)*x1(j)+W2(3)*x2(j); o3(j)=logsig(v3(j)); v4(j)=W1(4)*x1(j)+W2(4)*x2(j); o4(j)=logsig(v4(j)); end O=[o1(j) o2(j) o3(j) o4(j)]'; u1(j)=W3'*O; u2(j)=W4'*O; y1(j)=logsig(u1(j)); y2(j)=logsig(u2(j)); e1(j)=d1(j)-y1(j); e2(j)=d2(j)-y2(j); zeta=zeta+(e1(j)^2+e2(j)^2)/2; dW3=eta*e1(j)*y1(j).*O; dW4=eta*e2(j)*y2(j).*O; W3=W3+dW3;%修正权值 W4=W4+dW4;% 修正权值 dW1=zeros(4,1); dW2=zeros(4,1); 5
dW1(1)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(1)+e2(j)*y2(j)*(1-y2(j))*W4(1))*O(1) *(1-O(1))*x1(j); dW1(2)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(2))*O(2) *(1-O(2))*x1(j); dW1(3)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(3)+e2(j)*y2(j)*(1-y2(j))*W4(3))*O(3) *(1-O(3))*x1(j); dW1(4)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(4))*O(4) *(1-O(4))*x1(j); dW2(1)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(1)+e2(j)*y2(j)*(1-y2(j))*W4(1))*O(1) *(1-O(1))*x2(j); dW2(2)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(2))*O(2) *(1-O(2))*x2(j); dW2(3)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(3)+e2(j)*y2(j)*(1-y2(j))*W4(3))*O(3) *(1-O(3))*x2(j); dW2(4)=eta*(e1(j)*y1(j)*(1-y1(j))*W3(2)+e2(j)*y2(j)*(1-y2(j))*W4(4))*O(4) *(1-O(4))*x2(j); W1=W1+dW1;% 修正权值 W2=W2+dW2;% 修正权值 end sita(i)=zeta/N;%均方误差计算 if sita(i)
grid on; hold on; plot3(x1,x2,d2,'r'); title('functon f'); xlabel('input x1'); ylabel('input x2'); zlabel('output f'); hold off for j=1:N for k=1:4 v1(j)=W1(1)*x1(j)+W2(1)*x2(j); o1(j)=logsig(v1(j)); v2(j)=W1(2)*x1(j)+W2(2)*x2(j); o2(j)=logsig(v2(j)); v3(j)=W1(3)*x1(j)+W2(3)*x2(j); o3(j)=logsig(v3(j)); v4(j)=W1(4)*x1(j)+W2(4)*x2(j); o4(j)=logsig(v4(j)); end O=[o1(j) o2(j) o3(j) o4(j)]'; u1(j)=W3'*O; u2(j)=W4'*O; y1(j)=logsig(u1(j)); y2(j)=logsig(u2(j)); end plot3(x1,x2,y1,'b'); grid on; hold on plot3(x1,x2,d1,'r'); title('compare functon d1 and y1'); 7
xlabel('input x1'); ylabel('input x2'); zlabel('output d1 and y1'); hold off; plot3(x1,x2,y2,'b'); grid on; hold on plot3(x1,x2,d2,'r'); title('compare functon d2 and y2'); xlabel('input x1'); ylabel('input x2'); zlabel('output d2 and y2'); 七、实验结果 程序运行后可得到修正后的权值矩阵W1,W2,W3,W4分别赋给矩阵A,B,C,D。以 及实际输出的图行曲线与BP算法得到的图形曲线的比较图。d1与y1的比较图如图 1所示,d2与y2的比较图如图2所示。结果经BP学习算法得到的学习曲线能与实际 输出的真实曲线有较好的相似度,且误差在允许的范围之内。 A =[1.0109;-0.9579;1.9998;-1.9877]B =[ 2.0109;1.0421;2.9998;-0.9877] C =[-1.9955;-2.7510;-0.0016;-2.8610]D =[-3.0749;-0.0936;-1.0825; 8
分享到:
收藏