⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 程序11.txt

📁 MATLAB建一个三层BP神经网络的详细程序
💻 TXT
字号:
clear  %清空间  12-6-1
%因为输入有12维,中间层没有固定公式,目标评价只有一个,故可选BP网络结构为12-6-1的形式
w10ij=[.001 .001 .002 .001 .001 .002 .001 .001 .002 .001 .001 .002;
             .001 .001 .02 .001 .001 .02 .001 .001 .02 .001 .001 .02;
             .01 .01 .001 .01 .01 .001 .01 .01 .001 .01 .01 .001;
             .001 .001 .002 .001 .001 .002 .001 .001 .002 .001 .001 .002;
             .001 .01 .002 .001 .01 .002 .001 .01 .002 .001 .01 .002;
	         .0011 .001 .001 .0011 .001 .001 .0011 .001 .001 .0011 .001 .001];
w11ij=[-.1 -.02 .11 -.1 -.02 .11 -.1 -.02 .11 -.1 -.02 .11;
            -.21 .10 -.19 -.21 .10 -.19 -.21 .10 -.19 -.21 .10 -.19;
            -.14 .15 -.16 -.14 .15 -.16 -.14 .15 -.16 -.14 .15 -.16;
            .14 -.13 .17 .14 -.13 .17 .14 -.13 .17 .14 -.13 .17;
            -.13 .12 .21 -.13 .12 .21 -.13 .12 .21 -.13 .12 .21;
            -.16 -.23 .23 -.16 -.23 .23 -.16 -.23 .23 -.16 -.23 .23];
w20jk=[.01;.02;.1;.2;.1;.1];		%给输出层权值赋初值,w20jk表示wjk(k-2)
w21jk=[.18;.9;.9;.7;.8;.9];		%w21jk表示wjk(k-1)
q0j=[.5 .8 .4 .6 .1 .2];		%给隐含阀值赋初值,q0j代表@j(k-2)
q1j=[-.1 .02 .12 .14 -.02 .02];		%q1j代表@j(k-1)
q2j=0;					%给输出层阀值赋初值
p0=.2;
p1=.2;
w23jk=[0;0;0;0;0;0];w22jk=0;
w=0;
%xj=[0.5 0.3 0.2];			%网络的输入
xj=[  90  80  90  80  90  80  90  90  90  90  90  90  88;
        80  70  80  80  60  80  80	80	80	80	80	80	78;
        70	70	70	80	80	80	80	80	90	80	80	80	86;
        90	80	80	80	70	80	80	90	80	90	80	80	89;
        70	80	70	70	80	70	80	80	80	80	80	70	74;
        80	80	80	80	80	80	80	80	80	80	80	90	85;
        80	80	90	90	80	80	90	80	90	80	90	90	86;
        80	80	80	90	90	90	70	70	70	70	80	80	85;
        70	70	70	80	60	70	70	60	70	70	90	90	86;
        70	70	80	80	80	90	80	80	80	80	80	90	83;
        80	80	70	90	80	80	80	70	80	80	90	90	84;
        90	80	80	80	80	80	90	70	90	80	90	90	88;
        80	70	90	60	60	60	70	70	80	70	90	90	78;
        80	90	90	90	90	90	90	90	90	90	90	90	90;
        80	80	70	70	80	80	80	70	80	80	80	80	85;
        80	80	70	70	70	70	70	80	80	80	90	90	89;
        80	80	80	70	70	70	70	60	70	60	80	90	78;
        90	80	80	80	90	90	90	80	90	90	80	80	89;
        90	90	80	80	80	90	90	80	80	80	90	90	82;
        90	80	80	80	80	70	90	80	90	70	90	90	83;
        90	80	80	80	80	70	80	80	90	80	80	90	90;
        90	80	80	80	80	90	90	90	70	80	80	80	95;
        80	70	70	80	80	80	80	70	80	80	90	90	88;
        90	90	90	80	80	90	90	80	90	70	90	90	86;
        90	80	90	80	80	80	80	80	80	90	90	90	85;
        90	80	80	70	70	70	70	70	80	80	80	90	89;
        80	80	70	70	70	80	80	70	80	80	80	80	81;
        80	80	80	90	90	90	80	70	70	70	70	80	85;
        80	80	80	70	70	70	70	60	70	60	80	90	78;
        80	90	80	80	80	90	90	70	90	80	90	90	86];

ya=[0 0 0];yp=0;yy=0;m1=0;yam=0;yp1=0;qw=0;  		%清暂存器
yo=[0 0 0 0 0 0 0 0 0 0 0 0];ya1=0;
error=0.0001;				%赋容许误差值
e0=0;e1=0;e2=0;e3=0;e4=0;		%清暂存器
yo=0;ya=0;yb=0;y0=0;y1=0;y2=0;y3=0;
u=0;u1=0;u2=0;
dj2=0;e3=.055;
a0=0.02;a1=0.05;a2=0;a3=0.005;		%赋学习因子值
%M=250;					%赋程序循环次数
M=30;
for m=1:M                 %采样次数m循环1开始
    yn=xj(m,13);
        %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        yp=yn;
        for k=1:10;				%点循环2开始
        for i=1:6;				%计算输入层-隐层,循环3开始   按行读取X1---X12,X1---X12作为输入;x13作为训练目标
        x1=[w11ij(i,1)*xj(m,1)]+[w11ij(i,2)*xj(m,2)]+[w11ij(i,3)*xj(m,3)+w11ij(i,4)*xj(m,4)]+[w11ij(i,5)*xj(m,5)]+[w11ij(i,6)*xj(m,6)+w11ij(i,7)*xj(m,7)]+[w11ij(i,8)*xj(m,8)]+[w11ij(i,9)*xj(m,9)+w11ij(i,10)*xj(m,10)]+[w11ij(i,11)*xj(m,11)]+[w11ij(i,12)*xj(m,12)];
        x=x1+q1j(:,i);
        o=tanh(x);
        o1j(i)=o;
        end					%循环3结束,算出了6个隐层节点的输出
        for i=1:6				%计算隐层-输出层,循环4开始
        yb=yb+w21jk(i,:)*o1j(:,i);
        end
        yi=yb+p1;
        y=tanh(yi);

        e0=e1;
        e1=e2;
        e2=[(yp-y)^2]/2;
        for i=1:6
        d1=[1-o1j(:,i)]*dj2*w23jk(i,:);
        do=o1j(:,i)*d1;
        qw=q1j(:,i)-q0j(:,i);
        q2j=q1j(:,i)+.16*do+.01*qw;
        q3j(:,i)=q2j;
        for j=1:12
        dw=w11ij(i,j)-w10ij(i,j);
        w12ij=w11ij(i,j)+a1*do+a2*dw;
        w13ij(i,j)=w12ij;
        end
        end
        w10ij=w11ij;w11ij=w13ij;
        q0j=q1j;q1j=q3j;
        for i=1:6
        d2j=y*(1-y)*(yp-y);
        dw=w21jk(i,:)-w20jk(i,:);
        w22jk=w21jk(i,:)+.1*d2j*o1j(i)+.11*dw;
        w23jk(i,:)=w22jk;
        end
        w20jk=w21jk;w21jk=w23jk;
        ph=p1-p0;
        p2=p1+.6*(yp-y)+.1*ph;
        p0=p1;p1=p2;
        if e2<=.005;
            break;
        else
            end
        end
end
        w13ij
        w23jk
        
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -