|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位高手好
我这里有一个matlab程序,需要加入一个switch语句来选择不同的训练函数,小switch程序在matlab里可以成功运行,但加入到主体程序之后却不能运行,在这里求教各位给我看看,谢谢大家!!
function bp_offtrain(n_h,in,out,m)
% use LMBP train BP net.
%n_h=17;最佳为17,范围为14~19,n_h=17时在2.4Gcpu平均运行时间7s
tic
% load('E:\MATLAB6p5\work\sam_set_nn.mat');
load sam_set_nn.mat;
function(m)=functionname(P)
switch(p)
case(1)
m=trainlm
case(2)
m=traincg
case(3)
m=traingdf
case(4)
m=trainbfg
case(5)
m=traingda
case(6)
m=traindm
end
%define struct array p_set,tm_set,initw1w1_st,initw2w1_st,initb1_st,initb2_st
p_st=struct('p_n',{p1,p2,p3,p4,p5});
tm_st=struct('tm_n',{tfm1,tfm2,tfm3,tfm4,tfm5});
tfw_st=struct('tfw_n',{tfw1,tfw2,tfw3,tfw4,tfw5});
initw1w1_st=struct('w1w1',{ones(n_h,in),ones(n_h,in),ones(n_h,in),ones(n_h,in),ones(n_h,in)});
initw2w1_st=struct('w2w1',{ones(out,n_h),ones(out,n_h),ones(out,n_h),ones(out,n_h),ones(out,n_h)});
initb1_st=struct('b1',{ones(n_h,1),ones(n_h,1),ones(n_h,1),ones(n_h,1),ones(n_h,1)});
initb2_st=struct('b2',{ones(1),ones(1),ones(1),ones(1),ones(1)});
for n=1:5
% if n==5
% p_st(n).p_n=p_st(2).p_n;
% tm_st(n).tm_n=tm_st(2).tm_n;
% end
[pn,meanp,stdp,tn,meant,stdt]=prestd(p_st(n).p_n,tm_st(n).tm_n);
[R,Q]=size(pn);
iitst=2:4;
iival=4:4;
iitr=[1:4,3:4:Q];
val.P=pn(:,iival);
val.T=tn(:,iival);
test.P=pn(:,iitst);
test.T=tn(:,iitst);
ptr=pn(:,iitr);
ttr=tn(:,iitr);
net_bplm=newff(minmax(ptr),[n_h,1],{'tansig','purelin'},m);
net_bplm.trainParam.epochs=200;
net_bplm.trainParam.goal=0.01;
% [net_bplm,tr]=train(net_bplm,ptr,ttr,[],[],val,test);
% [net_bplm,tr]=train(net_bplm,ptr,ttr,[],[]);
[net_bplm,tr]=train(net_bplm,ptr,ttr);
figure(1)
subplot(3,2,n);
plot(tr.epoch,tr.perf,'b',tr.epoch,tr.vperf,'g',tr.epoch,tr.tperf,'r');
legend('Train','Validation','Test');
% plot(tr.epoch,tr.perf,'b');
% legend('Train');
ylabel('MSE');
xlabel('Time');
% set(gca,'xtick',[0]);
% set(gca,'xticklabel',{'Time'});
% title(['No.',int2str(n),' Mill Neural Nework Train Result'],'Color','y')
title(['No.',int2str(n),' Mill Neural Nework Train Result'])
% title(['No.',int2str(n),' Mill ']);
initw1w1_st(n).w1w1=net_bplm.IW{1,1};
initw2w1_st(n).w2w1=net_bplm.LW{2,1};
initb1_st(n).b1=net_bplm.b{1};
initb2_st(n).b2=net_bplm.b{2};
save result_offtrain initw1w1_st initw2w1_st initb1_st initb2_st net_bplm
an=sim(net_bplm,pn);
a=poststd(an,meant,stdt);
figure(2)
subplot(3,2,n);
[m,b,r]=postreg(a,tm_st(n).tm_n);
a_tm=a-tm_st(n).tm_n;
tfw_tm=tfw_st(n).tfw_n-tm_st(n).tm_n;
% if n==1
% tfw_tm=tfw1-tm_st(1).tm_n;
% elseif n==2
% tfw_tm=tfw2-tm_st(2).tm_n;
% elseif n==3
% tfw_tm=tfw3-tm_st(3).tm_n;
% elseif n==4
% tfw_tm=tfw4-tm_st(4).tm_n;
% else n==5
% tfw_tm=tfw5-tm_st(5).tm_n;
% end
iitg=[1:8:Q];
a_tfm=a_tm(:,iitg);
tfw_tfm=tfw_tm(:,iitg);
ttt=1:8:273;
figure(3)
subplot(3,2,n);
plot(ttt,a_tfm,'b:*');
hold on
plot(ttt,tfw_tfm,'k:+');
% legend('神经网络模型与实测值的误差','传统轧制力模型与实测值的误差');
hold off
% title(['Case number #',int2str(n)],'Color','y')
% save tfw_tm_file tfw_tm a tm_st
end
toc |
|