一个BP神经网络的曲线预测问题
我准备拟合一段曲线,从而预测其趋势项,但是,好像结果老是不对,请教各位大虾到底是哪里出了问题?是神经网络的结构不对,还是应该要做归一化的处理?如果要做归一化的处理,我是来一下,结果也不太对,困扰我好久了,恳请大家帮帮忙
clc
close all;
clear all;
fs=1000;%设置采样频率
for i=1 :3000
x(i)=3000-i;
end
x=x';
N=1000; %N代表训练样本的总点数
n=8; %n代表可由几个样本预测出一个点
x=x(1:N,1);%取出前N个点作为训练样本
%signal(x,fs);
c=flipud(x);%列不变,行倒置,预测前面的数据时不需要
c
for k=1:(N-n);%生产(N-n)×n的训练矩阵,共可以预测出(N-n)个点
for i=1:n
m(k,i)=c(k+i-1);
end
end
p=m';
for i=1 :(N-n)
t(i)=c(i+n);
end
%=premnmx(p,t);%归一化p,t(训练的输入输出矩阵)
net=newff(minmax(p),,{'tansig','purelin'},'trainlm');
net=init(net);
net.trainParam.show=20;
net.trainParam.lr=0.001;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=0;
%=train(net,pn,tn);
=train(net,p,t);
front=c;
%以上为神经网络的训练阶段,以下为神经网络的延拓阶段
for k=1:(N-n)%需预测的点数为(N-n)个
for i=1:n
b(k,i)=c(N-n+i+k-1) ;
end
a= b(k,:)
d= sim(net,a');
c(N-n+k+i)=d;
end
plot(front,'b+');
hold on
plot (c,'c') 你预测的曲线有没有对应的关系?我看你的程序好像输入输出数据并没有规律,这样网络怎么会收敛呢
to sghwxfqtd
for i=1 :3000x(i)=3000-i;
end
我的输入是一条最简单的下降直线啊,应该是最有规律是,目前我输入正弦信号也是不太收敛,好像这个拟合的趋势项不能保持得太久,不知道这是神经网络本身的缺陷还是我的网路设置不合理?
clc;
clear all;
t=linspace(0.15,1.15);
d=4*sin(20*pi*t).*sin(pi*2*t/10)+sin(10*pi*t);
a(1:100)=d;
a=a';
x=a(1:100,1);
%plot(t1,x);
fs=100;
N=100; %N代表训练样本的总点数
n=5; %n代表可由几个样本预测出一个点
x=x(1:N,1);%取出前N个点作为训练样本
%signal(x,fs);
c=flipud(x);%列不变,行倒置,预测前面的数据时不需要
c
for k=1:(N-n);%生产(N-n)×n的训练矩阵,共可以预测出(N-n)个点
for i=1:n
m(k,i)=c(k+i-1);
end
end
p=m';
for i=1 :(N-n)
T(i)=c(i+n);
end
%=premnmx(p,t);%归一化p,t(训练的输入输出矩阵)
net=newff(minmax(p),,{'tansig','purelin'},'trainlm');
net=init(net);
net.trainParam.show=20;
net.trainParam.lr=0.01;
net.trainParam.mc=0.9;
net.trainParam.epochs=1000;
net.trainParam.goal=0;
%=train(net,pn,tn);
=train(net,p,T);
front=c;
%以上为神经网络的训练阶段,以下为神经网络的预测阶段
for k=1:(N-n)%需预测的点数为(N-n)个
for i=1:n
b(k,i)=c(N-n+i+k-1) ;
end
a= b(k,:) ;
d= sim(net,a');
c(N-n+k+i)=d;
c
end
plot(front,'b+');
hold on
plot (c,'c')
页:
[1]