效果
用训练好的模糊神经网络对机械故障进行诊断,根据网络的预测值得到机械的技术状态。预测值小于 1.5 时为正常状态,预测值在 1.5~2.5 之间时为曲轴轴承轻微异响,预测值在 2.5~3.5 之间时为曲轴轴承严重异响预测值在 3.5~4.5 之间时为连杆轴承轻微异响,预测值大于 4.5 时为连杆轴承严重异响。
y是真实标签,yt是预测标签
模糊神经网络代码
clear all;
%下载数据load data_fnn;%网络结构
I=9; %输入节点
M=18; %隐含节点
O=1; %输出节点maxgen=10000; %迭代次数
xite=0.07; %网络学习率
a0=0.3;
b0=0.6;
Ek=1e-15; %误差%初始化模糊神经网络参数
p0=a0*ones(M,1);p0_1=p0;
p1=a0*ones(M,1);p1_1=p1;
p2=a0*ones(M,1);p2_1=p2;
p3=a0*ones(M,1);p3_1=p3;
p4=a0*ones(M,1);p4_1=p4;
p5=a0*ones(M,1);p5_1=p5;
p6=a0*ones(M,1);p6_1=p6;
p7=a0*ones(M,1);p7_1=p7;
p8=a0*ones(M,1);p8_1=p8;
p9=a0*ones(M,1);p9_1=p9;
%初始化模糊隶属度参数
c=0.8+b0*rands(M,I);c_1=c;
b=0.8+b0*rands(M,I);b_1=b;%训练数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);%----------------------------------------用训练样本训练模糊神经网络--------------------------------------------[n,m]=size(input_train);
EE=100;
p=1;
while p<=maxgen && EE>=Ekfor k=1:m %m 样本个数%提取训练样本x=inputn(:,k);%输入参数模糊化for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endend%模糊隶属度计算for i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i)*u(7,i)*u(8,i)*u(9,i);endaddw=sum(w);%输出计算for i=1:Myi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6)+p7_1(i)*x(7)+p8_1(i)*x(8)+p9_1(i)*x(9);endaddyw=0;addyw=yi*w';yn(k)=addyw/addw;e(k)=outputn(k)-yn(k);%系数p修正值计算d_p=zeros(M,1);for i=1:Md_p(i)=xite*e(k)*w(i)/addw;end%系数b修正值计算d_b=0*b;for i=1:Mfor j=1:Id_b(i,j)=xite*e(k)*(yi(i)*addw-addyw)*(x(j)-c(i,j))^2*w(i)/(b(i,j)^2*addw^2);endend%c的修正值计算d_c=0*c;for i=1:Mfor j=1:Id_c(i,j)=xite*e(k)*(yi(i)*addw-addyw)*2*(x(j)-c(i,j))*w(i)/(b(i,j)*addw^2);endend%系数修正p0_1=p0_1+d_p;p1_1=p1_1+d_p*x(1);p2_1=p2_1+d_p*x(2);p3_1=p3_1+d_p*x(3);p4_1=p4_1+d_p*x(4);p5_1=p5_1+d_p*x(5);p6_1=p6_1+d_p*x(6);p7_1=p7_1+d_p*x(7);p8_1=p8_1+d_p*x(8);p9_1=p9_1+d_p*x(9);%隶属度参数修正b=b+d_b;c=c+d_c;endfor k=1:m %m 样本个数%提取训练样本x=inputn(:,k);%输入参数模糊化for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endend%模糊隶属度计算for i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i)*u(7,i)*u(8,i)*u(9,i);endaddw=sum(w);%输出计算for i=1:Myi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6)+p7_1(i)*x(7)+p8_1(i)*x(8)+p9_1(i)*x(9);endaddyw=0;addyw=yi*w';yn(k)=addyw/addw;endEE=(1/2)*sumsqr(outputn-yn)E(p)=EE;p=p+1;
end
EE,p
y=mapminmax('reverse',yn,outputps)
epoch=1:size(E,2);
figure
plot(epoch,E,'-r');
title('误差变化曲线');xlabel('步数');ylabel('误差');%----------------------------------------------测试样本网络预测-----------------------------------------%输入数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
[n,m]=size(input_test);%网络预测
for k=1:1:mx=inputn_test(:,k);%输入参数模糊化for i=1:Ifor j=1:Mu(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));endend%模糊隶属度计算for i=1:Mw(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i)*u(7,i)*u(8,i)*u(9,i);endaddw=sum(w);%输出计算for i=1:Myi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6)+p7_1(i)*x(7)+p8_1(i)*x(8)+p9_1(i)*x(9);endaddyw=0;addyw=yi*w';%网络预测值ytn(k)=addyw/addw;
end%预测值反归一化
yt=mapminmax('reverse',ytn,outputps)
#代码:https://mbd.pub/o/bread/mbd-ZJyTmZZw