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

📄 bpnn.m

📁 递归神经网络故障诊断
💻 M
字号:
clear;
%标准输入输出数据
p=[1 1 1 1 1;0 1 0 0 0;1 0 0 0 0;1 1 0 0 0;1 1 1 0 0;1 1 1 1 0];
t=[0 0 0 0 0;1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;0 0 0 1 0;0 0 0 0 1];
%给权值赋初值
w1=eye(5,10);
w2=eye(10,5);
wr=eye(10,10)/3;
wobias=eye(6,5)/4;
wbias=eye(6,10)/3;
x=ones(6,10)/3;
ww2=zeros(10,5)/6;
ww1=zeros(5,10)/6;
wwr=zeros(10,10)/6;
wwobias=zeros(6,5)/5;
wwbias=zeros(6,10)/4;
g=[1 1 1 1 1];
f=[1 1 1 1 1 1 1 1 1 1];
mmax=0.2;
mmmax=0.1;
%要求的偏差值
h=0.04;
u=0.04;
%输出层权值得学习速度
a=1.5;
%隐含层权值的学习速度
b=1.18;
%递归层权值的学习速度
v=1.5;
%输出bias unit的学习速度
r=3000;
%输入bias unit的学习速度
w=10;
%学习的步数
n=0;
mm=0;
while mmax>0.01
    %六个输入模式对依次输入
    %while mmax>0.01
    %十个隐含层单元的输入输出
    s=p*w1+x*wr+h*wbias;
    x=exp(-s.^2./2);
    %五个输出层单元的输入输出
    y=x*w2+u*wobias;
    c=exp(-y.^2./2);
    %希望的输出与实际的输出的偏差
    j=t-c;
    dj=max(abs(j));
    mmax=max(dj');
    if mmax>0.04
        for k=1:6
            %输出层单元的一般化误差
            d=-j.*y.*exp(-y.^2./2);
            %隐含层单元的一般化误差
            e=-d*w2'.*s.*exp(-s.^2./2);
            ww2=ww2+a*(f'*d(k,:)).*(g'*x(k,:))';
            wwobias=wwobias+r*d*h;
            ww1=ww1+b*(f'*p(k,:))'.*(g'*e(k,:));
            wwr=wwr+v*(f'*x(k,:))'.*(f'*e(k,:));
            wwbias=wwbias+w*e*u;
        end
        ww2=ww2./6;
        ww1=ww1./6;
        wwr=wwr./6;
        wwobias=wwobias./6;
        wwbias=wwbias./6;
        w2=w2+ww2;
        w1=w1+ww1;
        wr=wr+wwr;
        wobias=wobias+wwobias;
        wbias=wbias+wwbias;
    end
    mm=mm+1;
    n=n+1;
    nn(mm)=n;
    ee(n)=mmax;
    ww2=zeros(10,5)/6;
    ww1=zeros(5,10)/6;
    wwr=zeros(10,10)/6;
    wwobias=zeros(6,5)/5;
    wwbias=zeros(6,10)/4;
end
%找出所有实际输出与希望输出的最大误差
%所有模式训练后的满足要求的实际输出
x=1:1:n;
plot(x,ee);
grid on;
xlabel('训练步数');
ylabel('最大误差');

⌨️ 快捷键说明

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