你用的工具箱函数了吗?用工具箱函数可以简单点,工具箱调用是nntool;在command
windows使用,先用import,将数据分别放入
inputs和targets(导入数据)。然后按NEW
NETWORK选择结构,选择Feedforward
Backprop,确定Number
of
Layers(网络层数),在下面确定每层节点数,然后选择下函数:logsig
,purelin,tansig。最后,关闭此窗口。单击View,即可显示结构。
然后按train,在
inputs和targets里面填入输入值X和训练的Y,在training
parameters中设置你要的参数,比如误差。最后按train就可以开始训练。完了一定记住按网络模型输出(Export),将模型转入command
windows。下面调用:如y1=sim(network1,x0);plot(x,y,'o',x0,y0,y1,':')。
如果你要程序,可以这样:
function
BP
x=[-1:0.01:1];
y=[-1:0.01:1];
p=[x;y];
T=x.^2+y.^2;
x0=[-1:0.1:1];
y0=[-1:0.1:1];
p0=[x0;y0];
T0=x0.^2+y0.^2;
net=newff(minmax(p),[10,1],{'logsig','purelin'});
net.trainParam.epochs=10000;
net.trainParam.goal=1e-6;
net=train(net,p,T);
figure;
T1=sim(net,p0);
plot(p,T,'o',p0,T0,p0,T1,':');
end
程序有点问题,估计是原作者数据处理没贴全。先改进如下:
clc;
clear
all;
close
all;
format
long;
clear
all;
p=[4949.93
5203.34
5365.04
5365.99];
t=[10977.09
10987.81
11754.32
12520.57
1180.6
1333.5
1561.8
1738.8];
tt=[3.1
3.6;
4.2
4.8;
6.7
9.1;
13
18.9;
29
226.6;
51.1
42;
78.2
79.6;
113
720.4;
169.3
194.4;
202.3
253.8];
damax=max(max(max(tt)),max(t));
damin=min(min(min(tt)),min(t));
[a,b]=size(tt);
for
i=1:a
pp(i,:)=(tt(i,:)-damin)/(damax-damin);
end
tt=(t-damin)/(damax-damin);
n=length(tt);
threshold=[0,1;0,1];
net=newff(threshold,[3,1],{'tansig','logsig'},'trainlm');
net.trainparam.epochs=1000;
net.trainparam.goal=0.001;
lp.lr=0.1;
pp
=
pp';
net=train(net,pp(:,1:n),tt);
for
i=1:length(pp)
p_test=pp(:,i);
out(i)=sim(net,p_test);
pre(i)=out(i)*(damax-damin)+damin;
end