小波神经网络的matlab程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小波神经网络的matlab程序相关的知识,希望对你有一定的参考价值。
clc
clear
%step 1=========================
%定义输入样本;
t=0:0.01:1.5;
x=-sin(2*pi*t);
targ=[0 0 1 1 0 0 ];
eta=0.02;aerfa=0.935;
%初始化连接权wjh(输出层和隐层的连接权);whi(隐层和输出层的连接权);
%假设小波函数节点数为:H个;样本数为P;
%输出节点数为:J个;输入节点数为:I个;
H=15;P=1;
I=length(t);
J=length(targ);
%初始化小波参数
b=rand(H,1);
a=rand(H,1);
%初始化权系数;
whi=rand(I,H);
wjh=rand(H,J);
%阈值初始化;
b1=rand(H,1);
b2=rand(J,1);
p=0;
%保存的误差;
Err_NetOut=[];
flag=1;count=0;
while flag>0
flag=0;
count=count+1;
%step 2=================================
xhp1=0;
for h=1:H
for i=1:I
xhp1=xhp1+whi(i,h)*x(i);
end
ixhp(h)=xhp1+b1(h);
xhp1=0;
end
for h=1:H
oxhp(h)=fai((ixhp(h)-b(h))/a(h));
end
%step 3====================================
ixjp1=0;
for j=1:J
for h=1:H
ixjp1=ixjp1+wjh(h,j)*oxhp(h);
end
ixjp(j)=ixjp1+b2(j);
ixjp1=0;
end
for i=1:J
oxjp(i)=fnn(ixjp(i));
end
%step 6==保存每次误差=====
wuchayy=1/2*sumsqr(oxjp-targ);
%E_x=1/2*sumsqr(x);
Err_NetOut=[Err_NetOut wuchayy];%保存每次的误差;
%Err_rate=Err_NetOut/E_x;
%Err_rate
%oxjp
%求detaj ,detab2==================================
for j=1:J
detaj(j)=-(oxjp(j)-targ(j))*oxjp(j)*(1-oxjp(j));
end
for j=1:J
for h=1:H
detawjh(h,j)=eta*detaj(j)*oxhp(h);
end
end
detab2=eta*detaj;
%求detah, detawhi detab1 detab detaa;========================
sum=0;
for h=1:H
for j=1:J
sum=detaj(j)*wjh(h,j)*diffai((ixhp(h)-b(h))/a(h))/a(h)+sum;
end
detah(h)=sum;
sum=0;
end
for h=1:H
for i=1:I
detawhi(i,h)=eta*detah(h)*x(i);
end
end
detab1=eta*detah;
detab=-eta*detah;
for h=1:H
detaa(h)=-eta*detah(h)*((ixhp(h)-b(h))/a(h));
end
%引入动量因子aerfa,修正各个系数==========================================
wjh=wjh+(1+aerfa)*detawjh;
whi=whi+(1+aerfa)*detawhi;
a=a+(1+aerfa)*detaa';
b=b+(1+aerfa)*detab';
b1=b1+(1+aerfa)*detab1';
b2=b2+(1+aerfa)*detab2';
%======================================================
%引入修正算法!!
%判断所有的样本是否计算完==================================
p=p+1;
if p~=P
flag=flag+1;
else
if Err_NetOut(end)>0.05
flag=flag+1;
else
figure;
plot(Err_NetOut);
title('误差曲线');
disp('目标达到');
%disp(oxjp);
end
end
if count>2000
figure;
plot(Err_NetOut);
title('误差曲线');
disp('目标未达到');
disp(oxjp);
break;
end
end
以上是小波神经网络的matlab源程序,麻烦高手帮忙改一下是输入样本为t=[0.096 0.131 0.094;
0.131 0.094 0.125;
0.094 0.125 0.122;
0.122 0.106 0.123;
0.106 0.123 0.117;
0.123 0.117 0.100;
0.100 0.145 0.120;
0.145 0.120 0.119;
0.120 0.119 0.112;
0.112 0.105 0.095;
0.105 0.095 0.091;
0.095 0.091 0.082;
0.082 0.104 0.099;
0.104 0.099 0.106;
0.099 0.106 0.085;
0.085 0.085 0.084]'; 输出样本为targ=[0.125 0.122 0.106 0.117 0.100 0.145 0.119 0.112 0.105 0.091 0.082 0.104 0.106 0.085 0.085 0.083]; 我对这个程序不是很理解,改了老长时间改不对,请高手指点一下!
小波能量BP基于小波能量系数提取和BP神经网络的检测算法matlab仿真
1.软件版本
MATLAB2013b
2.算法理论
步骤1:小波能量系数提取的方法进行降维
小波降维处理,将高维的数据转换为低维的数据。
%对数据进行小波变换
[C,L] = wavedec(data,p,'db3');
ca8=appcoef(C,L,'db3',8);
cd8=detcoef(C,L,8);
cd7=detcoef(C,L,7);
cd6=detcoef(C,L,6);
cd5=detcoef(C,L,5);
cd4=detcoef(C,L,4);
cd3=detcoef(C,L,3);
cd2=detcoef(C,L,2);
cd1=detcoef(C,L,1);
%计算个数据的能量
Fca8 = sqrt(sum(ca8'*ca8)/length(ca8));
Fcd8 = sqrt(sum(cd8'*cd8)/length(cd8));
Fcd7 = sqrt(sum(cd7'*cd7)/length(cd7));
Fcd6 = sqrt(sum(cd6'*cd6)/length(cd6));
Fcd5 = sqrt(sum(cd5'*cd5)/length(cd5));
Fcd4 = sqrt(sum(cd4'*cd4)/length(cd4));
Fcd3 = sqrt(sum(cd3'*cd3)/length(cd3));
Fcd2 = sqrt(sum(cd2'*cd2)/length(cd2));
Fcd1 = sqrt(sum(cd1'*cd1)/length(cd1));
%获得降维后的数据
data2(:,i) = [Fcd1 Fcd2 Fcd3 Fcd4 Fcd5 Fcd6 Fcd7 Fcd8 Fca8 ];
%去掉异常点之后的原数据
Spectrum_energy2i = data;
%保存小波变化后的每一层的数据
Spectrum_energycd8i = cd8;
Spectrum_energycd7i = cd7;
Spectrum_energycd6i = cd6;
Spectrum_energycd5i = cd5;
Spectrum_energycd4i = cd4;
Spectrum_energycd3i = cd3;
Spectrum_energycd2i = cd2;
Spectrum_energycd1i = cd1;
这个部分计算小波变化之后每一层的能量,最后得到如下的仿真结果:
从上面的仿真结果可知,维度变为了9维,这样可以方便的进行后期神经网络训练等操作。
步骤2:神经网络功能1
用光谱特征指数或者小波能量系数降维处理后的数据 来预测所给的相应的生理指标(数据中给出的是β-胡萝卜素)。建立预测模型,并按照前面所给的模型评价指标来对模型进行评价。
这个步骤,首先需要对光谱信息进行降维处理,按步骤二的方法进行,然后进行神经网络训练:
for i = 1:c
data3(:,i) = (data2(:,i)-min(data2(:,i)))/(max(data2(:,i)) - min(data2(:,i)));
end
P = data3;
T = (Beta_carotene-min(Beta_carotene))/(max(Beta_carotene)-min(Beta_carotene));
t1 = clock; %计时开始
net = fitnet(65);
net.trainParam.epochs = 1000; %设置训练次数
net.trainParam.goal = 0.00001; %设置性能函数
net.trainParam.show = 1; %每10显示
net.trainParam.Ir = 0.005; %设置学习速率
net = train(net,P,T); %训练BP网络
datat = etime(clock,t1);
Nets = net;
view(Nets);
%选择100个数据进行侧四
y = sim(net,P(:,1:100));
得到如下的仿真结果:
本系统采用的神经网络结构如下图所示:
最后得到的预测结果和原始的数据如下所示:
步骤3:神经网络功能2
气象数据和化学指标中的数据建立模型,思路如下:数据中提供的是河南、四川和贵州三个省的气象数据和烟叶生理指标。这三个省由于气象因素影响,导致其烟叶香型不同,分别对应为浓香型,清香型和中间香型。我希望先找出化学指标中对香型影响最重要的因素,然后再看众多气象因素中哪个是决定香型的关键因素。
首先根据论文中提供的主成分分析方法,获得关键影响因素,然后提取关键影响因素进行训练分类。
最后的分类结果如下所示:
3.部分程序
clc;
clear;
close all;
RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
% 第二方面就是用本人所提供的气象数据和化学指标中的数据建立模型,
% 思路如下:数据中提供的是河南、四川和贵州三个省的气象数据和烟叶生理指标。
% 这三个省由于气象因素影响,导致其烟叶香型不同,分别对应为浓香型,清香型和中间香型。
% 我希望先找出化学指标中对香型影响最重要的因素,然后再看众多气象因素中哪个是决定香型的关键因素。
% 浓香型
load data\\chemical\\chemical_SCMC.mat %chemical_SCMC
load data\\chemical\\chemical_SCTP.mat %chemical_SCTP
% 清香型
load data\\chemical\\chemical_HNXC.mat %chemical_HNXC
load data\\chemical\\chemical_HNNY.mat %chemical_HNNY
% 中间香型
load data\\chemical\\chemical_GZBJ.mat %chemical_GZBJ
load data\\chemical\\chemical_GZZY.mat %chemical_GZZY
%%
%先找出化学指标中对香型影响最重要的因素
%主成分分析,获得最为重要的几个影响因素
%设置者三种类型的训练目标分别为-1,0,1,作为训练目标值
%计算月平均值
% 浓香型
Tmp1 = [chemical_SCMC;chemical_SCTP];
[r1,c1] = size(Tmp1);
for i = 1:c1
Type1(:,i) = Tmp1(:,i);
end
for i = 1:c1
Type1s(:,i) = (Type1(:,i)-min(Type1(:,i)))/(max(Type1(:,i)) - min(Type1(:,i)));
end
% 清香型
Tmp2 = [chemical_HNXC;chemical_HNNY];
[r2,c2] = size(Tmp2);
for i = 1:c2
Type2(:,i) = Tmp2(:,i);
end
for i = 1:c2
Type2s(:,i) = (Type2(:,i)-min(Type2(:,i)))/(max(Type2(:,i)) - min(Type2(:,i)));
end
% 中间香型
Tmp3 = [chemical_GZBJ;chemical_GZZY];
[r3,c3] = size(Tmp3);
for i = 1:c3
Type3(:,i) = Tmp3(:,i);
end
for i = 1:c3
Type3s(:,i) = (Type3(:,i)-min(Type3(:,i)))/(max(Type3(:,i)) - min(Type3(:,i)));
end
%进行主成分分析,获得最佳的判决指标
%分别使用不同的参数指标进行训练
P0 = [Type1s;
Type2s;
Type3s];
factor = func_pca(P0);
%获得几个主要的参数指标
factor = sort(unique(factor));
%下面通过这几个主要的参数指标进行神经网络训练
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
%%%%%%%%%%%%%%%%%%%%%获得关键化学指标%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pc = [Type1s(:,factor);
Type2s(:,factor);
Type3s(:,factor);]';%分别使用不同的参数指标进行训练
Tc = [0.2*ones(1,r1) 0.5*ones(1,r2) 1*ones(1,r3);];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 获得气候主要因素
clear Tmp1 Tmp2 Tmp3
clear Type1 Type2 Type3
clear Type1s Type2s Type3s
clear P0 factor
load data\\Weather\\Weather_SCHL.mat %Weather_SCHL
load data\\Weather\\Weather_HNXC.mat %Weather_HNXC
load data\\Weather\\Weather_HNNY.mat %Weather_HNNY
load data\\Weather\\Weather_GZBJ.mat %Weather_GZBJ
load data\\Weather\\Weather_GZZY.mat %Weather_GZZY
% 浓香型
Tmp1 = [Weather_SCHL];
[r1,c1] = size(Tmp1);
for i = 1:c1
Type1(:,i) = Tmp1(:,i);
end
for i = 1:c1
Type1s(:,i) = (Type1(:,i)-min(Type1(:,i)))/(max(Type1(:,i)) - min(Type1(:,i)));
end
% 清香型
Tmp2 = [Weather_HNXC;Weather_HNNY];
[r2,c2] = size(Tmp2);
for i = 1:c2
Type2(:,i) = Tmp2(:,i);
end
for i = 1:c2
Type2s(:,i) = (Type2(:,i)-min(Type2(:,i)))/(max(Type2(:,i)) - min(Type2(:,i)));
end
% 中间香型
Tmp3 = [Weather_GZBJ;Weather_GZZY];
[r3,c3] = size(Tmp3);
for i = 1:c3
Type3(:,i) = Tmp3(:,i);
end
for i = 1:c3
Type3s(:,i) = (Type3(:,i)-min(Type3(:,i)))/(max(Type3(:,i)) - min(Type3(:,i)));
end
%进行主成分分析,获得最佳的判决指标
%分别使用不同的参数指标进行训练
P0 = [Type1s;
Type2s;
Type3s];
factor = func_pca(P0);
%获得几个主要的参数指标
factor = sort(unique(factor));
%下面通过这几个主要的参数指标进行神经网络训练
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
%%%%%%%%%%%%%%%%%%%%%获得关键气候因素%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pw = [Type1s(:,factor);
Type2s(:,factor);
Type3s(:,factor);]';%分别使用不同的参数指标进行训练
Tw = [0.2*ones(1,r1) 0.5*ones(1,r2) 1*ones(1,r3);];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%首先根据气候进行训练分类
%首先根据气候进行训练分类
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
P = Pw
T = Tw;
%为了得到最为关键的几个指标,我们对12个指标分别进行训练测试分析,得到影响最精确的指标
%此部分神经网络代码无需变动,只需要修改内部的参数即可。
t1 = clock; %计时开始
net = fitnet(54);
net.trainParam.epochs = 1000; %设置训练次数
net.trainParam.goal = 0.00001; %设置性能函数
net.trainParam.show = 1; %每10显示
net.trainParam.Ir = 0.005; %设置学习速率
net = train(net,P,T); %训练BP网络
datat = etime(clock,t1);
Nets = net;
% view(Nets);
y = sim(net,P);
figure;
stem(y,'r');hold on
plot(y,'b-.');hold on
plot(T,'b--','LineWidth',3);hold on
legend('预测数据(归一化)','实际数据(归一化)');
title('香型分类(根据气候进行分类)');
%%
%然后根据化学指标因素进行训练分析
%然后根据化学指标因素进行训练分析
%使用神经网络的相关结果,选择最佳的几个参数作为香型判断指标
P = Pc
T = Tc;
%为了得到最为关键的几个指标,我们对12个指标分别进行训练测试分析,得到影响最精确的指标
%此部分神经网络代码无需变动,只需要修改内部的参数即可。
t1 = clock; %计时开始
net = fitnet(34);
net.trainParam.epochs = 1000; %设置训练次数
net.trainParam.goal = 0.00001; %设置性能函数
net.trainParam.show = 1; %每10显示
net.trainParam.Ir = 0.005; %设置学习速率
net = train(net,P,T); %训练BP网络
datat = etime(clock,t1);
Nets = net;
% view(Nets);
y = sim(net,P);
A09-24
以上是关于小波神经网络的matlab程序的主要内容,如果未能解决你的问题,请参考以下文章
电磁泄露信息识别通过haar小波变换特征提取和GRNN网络实现电磁泄露信息识别的matlab仿真
模糊小波神经网络预测基于matlab模糊小波神经网络的攻击目标优先级评估含Matlab源码 2342期