声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2507|回复: 2

[人工智能] 一个BP神经网络的曲线预测问题

[复制链接]
发表于 2009-7-28 17:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我准备拟合一段曲线,从而预测其趋势项,但是,好像结果老是不对,请教各位大虾到底是哪里出了问题?

是神经网络的结构不对,还是应该要做归一化的处理?如果要做归一化的处理,我是来一下,结果也不太对,困扰我好久了,恳请大家帮帮忙
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

%[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%归一化p,t(训练的输入输出矩阵)
net=newff(minmax(p),[8 1],{'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;

%[net,tr]=train(net,pn,tn);
[net,tr]=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')
回复
分享到:

使用道具 举报

发表于 2009-7-29 09:46 | 显示全部楼层
你预测的曲线有没有对应的关系?我看你的程序好像输入输出数据并没有规律,这样网络怎么会收敛呢
 楼主| 发表于 2009-7-29 10:40 | 显示全部楼层

to sghwxfqtd

for i=1 :3000
    x(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


%[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%归一化p,t(训练的输入输出矩阵)
net=newff(minmax(p),[8 1],{'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;

%[net,tr]=train(net,pn,tn);
[net,tr]=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')
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 23:01 , Processed in 0.109141 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表