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

📄 bp3.m

📁 三层前馈神经网络的BP算法。程序具有以下功能: (1) 允许选择各层节点数; (2) 允许选用不同的学习率η; (3) 能对权值进行初始化
💻 M
字号:
function bp3

clear all;
clc

n=input('输入层神经元个数:');
m=input('中间层神经元个数:');
l=input('输出层神经元个数:');
a1=input('输入学习率alpha:');
b1=input('输入学习率beta:');
mode=input('选择单极或双极函数,单极输入1,双极输入2:');
cntmax=input('最大训练次数选择:');

X1=[1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1];
X2=[0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0];
X3=[1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1];
X=[X1;X2;X3];
if(mode==1)
    Y1=[1 0 0];
    Y2=[0 1 0];
    Y3=[0 0 1];
else
    Y1=[1 -1 -1];
    Y2=[-1 1 -1];
    Y3=[-1 -1 1];
end
Yo=[Y1;Y2;Y3];

bi=zeros(1,m);
ct=zeros(1,l);
dt=zeros(1,l);
emax=0.001;
cnt=0;
w=rands(n,m);
S='初始化连接权为:';
disp(S);
disp(w);
v=rands(m,l);
t1=rand(1,m);
t2=rand(1,l);
er=0.012;
output=zeros(3,3);

for cnt=1:cntmax
    if (er>emax)
        er=0;
        for cp=1:3
            X0=X(cp,:);
            Y=X0*w;
            Y0=Yo(cp,:);
            Y=Y-t1;
            for j=1:m
                if(mode==1)
                    bi(j)=1/(1+exp(-Y(j)));
                else
                    bi(j)=2/(1+exp(-Y(j)))-1;
                end
            end
            xy=bi*v;
            Y=xy;
            Y=Y-t2;
            for t=1:l
                if(mode==1)
                    ct(t)=1/(1+exp(-Y(t)));
                    else
                    ct(t)=2/(1+exp(-Y(t)))-1;
                end
            end
            er=er+sum((Y0-ct).*(Y0-ct))/2;
            for t=1:l
                if(mode==1)
                dt(t)=(Y0(t)-ct(t))*ct(t)*(1-ct(t));
                else
                dt(t)=(Y0(t)-ct(t))*(1-ct(t)*ct(t))/2;
                end
            end
            xy=dt*v';
            if(mode==1)
                ei=xy.*bi.*(1-bi);
            else
                ei=xy.*(1-bi.*bi)/2;
            end
            for t=1:l
                for j=1:m
                    v(j,t)=v(j,t)+a1*dt(t)*bi(j);
                end
                t2(t)=t2(t)+a1*dt(t);
            end
            for j=1:m
                for k=1:n
                    w(k,j)=w(k,j)+b1*X0(k)*ei(j);
                end
                t1(j)=t1(j)+b1*ei(j);
            end
            output(cp,:)=ct;
        end
	else break;
    end
end

output=output';
S='训练次数cnt:';
disp(S);
disp(cnt);
S='输出向量:';
disp(S);
disp(output);
S='全局误差er:';
disp(S);
disp(er);

⌨️ 快捷键说明

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