matlab小波神经网络,MATLAB 小波神经网络预测求助大神
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
神經網絡初始化
從數據庫下載訓練程序和預測數據,初始化神經網絡結構、權值和函數參數,并對訓練數據進行歸一化處理。其中,input、output分別為訓練輸
入和輸出數據,input_test、output_test分別為預測輸入和輸出數據。
%從數據庫下載數據
load distance input output input_test output_test
%網絡結構初始化
M=4;
N=1;
n=6;
%權值和參數學習率
lr1=0.01;
lr2=0.001;
maxgen=100; %網絡迭代學習次數
%網絡權值初始化
Wjk=randn(n,M);
Wij=randn(N,n);
a=randn(1,n);
b=randn(1,n);
%權值學習增量初始化
d_Wjk=zeros(n,M);
d_Wjk=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
%訓練數據歸一化
[inputn,inputps]=mapminmax(input');
[outputn,outputps]=mapminmax(output');
inputn=inputn';
outputn=outputn';
用訓練數據訓練神經網絡,使神經網絡具有短時過駁滑道長度的預測能力。
%網絡訓練
for i=1:maxgen
error(i)=0; %記錄每次誤差
%網絡訓練
for kk=1:size(input,1)
%提取輸入輸出數據
x=inputn(kk,:);
yqw=outputn(kk,:);
%網絡預測輸出
for j=1:n
for k=1:M
net(j)=net(j)+Wjk(j,k)*x(k);
net_ab(j)=(net(j)-b(j))/a(j);
end
temp=mymorlet(net_ab(j));
for k=1:N
y=y+Wij(k,j)*temp;
end
end
%誤差累計
error(i)=error(i)+sum(abs(yqw-y));
%權值修正
for j=1:n
%計算d_Wij(Wij修正值)
temp=mymorlet(net_ab(j));
for k=1:N
d_Wij(k,j)=d_Wij(k,j)-(yqw(k)-y(k))*temp;
end
%計算d_Wij(Wij修正值)
temp=d_mymorlet(net_ab(j));
for k=1:M
for 1=1:N
d_Wjk(j,k)=d_Wjk(j,k)+(yqw(1)-y(1)*Wij(1,j);
end
d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j);
end
%計算d_b(b修正值)
for k=1:N
d_b(j)=d_b(j)+(yqw(k)-y(k))*Wij(k,j);
end
d_b(j)=d_b(j)*temp/a(j);
%計算d_a(a修正值)
for k=1:N
d_a(j)=d_a(j)+(yqw(k)-y(k))*Wij(k,j);
end
d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j);
end
% 權值參數更新
Wij=Wij-lr1*d_Wij;
Wjk=Wjk-lr1*d_Wjk;
b=b-lr2*d_b;
a=a-lr2*d_a;
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
end
end
其中,程序包含的函數mymorlet以及偏導函數d_mymorlet的形式如下:
function y=mymorlet(t)
% 該函數計算函數輸出
% t input 輸入變量
% y output 輸出變量
y=exp(-(t.^2)/2)*cos(1.75*t);
function y=d_mymorlet(t)
% 該函數用于計算函數偏導函數輸出
% t input 輸入變量
% y output 輸出變量
y =-1.75*sin(1.75*t).*exp(-(t.^2)/2)-t*cos(1.75*t).*exp(-(t.^2)/2);
用訓練好的神經網絡預測短時間過駁滑道的距離,并以圖形的形式表示神經網絡預測結果。
%預測輸入歸一化
x=mapminmax('apply',input_test',inputps);
x=x';
%網絡預測
for i=1:92
x_test=x(i,:);
for j=1:1:n
for k=1:1:M
net(j)=net(j)+Wjk(j,k)*x_test(k);
net_ab(j)=(net(j)-b(j))/a(j);
end
temp=mymorlet(net_ab(j));
for k=1:N
y(k)=y(k)+Wij(k,j)*temp;
end
end
yuce(i)=y(k); %預測結果記錄
y=zeros(1,N); %輸出節(jié)點初始化
net=zeros(1,n); %隱含節(jié)點初始化
net_ab=zeros(1,n); %隱含節(jié)點初始化
end
%網絡預測反歸一化
ynn=mapmonmax('reverse',yuce,outputps);
figure(1)
plot(ynn,'r:')
hold on
polt(output_test,'b- -')
title('預測過駁滑道長度',fontsize',12)
legend('預測過駁滑道長度','實際過駁滑道長度')
xlabel('時間點')
ylabel('過駁滑道長度')
總結
以上是生活随笔為你收集整理的matlab小波神经网络,MATLAB 小波神经网络预测求助大神的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS开发之开发工具Xcode下载
- 下一篇: 粒子群算法matlab代码实例使用与参数