?? lmtrain.m
字號:
%此為BP網(wǎng)絡(luò)訓(xùn)練程序
function retstr = LmTrain(ModelNo,NetPara,TrainPara,InputFun,OutputFun,DataDir)
NNTWARN OFF
retstr=-1;
%%%% 輸入?yún)?shù)賦值開始 %%%%%%%%%%%%%%%%%%%%%%%
% 這部分代碼主要是方便用戶調(diào)試用
ModelNo='1';
NetPara(1)=7;
NetPara(2)=1;
NetPara(3)=6;
NetPara(4)=10;
TrainPara(1)=25;
TrainPara(2)=1000;
TrainPara(3)=0.001;
TrainPara(4)=0.001;
TrainPara(5)=0.001;
TrainPara(6)=10;
TrainPara(7)=0.1;
TrainPara(8)=1e10;
DataDir='.';
InputFun = 'tansig';
OutputFun = 'purelin';
%%%% 輸入?yún)?shù)賦值結(jié)束 %%%%%%%%%%%%%%%%%%%%%%%%
%保留原目錄
olddir=pwd;
%進(jìn)入數(shù)據(jù)所在目錄
cd(DataDir);
deltalin(1);
deltalog(1);
deltatan(1);
% 網(wǎng)絡(luò)參數(shù)
InputDim=NetPara(1); %輸入層節(jié)點(diǎn)數(shù)
OutputDim=NetPara(2); %輸出層節(jié)點(diǎn)數(shù)
MidDim=NetPara(3); %中間層節(jié)點(diǎn)數(shù)
data_num=NetPara(4); %訓(xùn)練數(shù)據(jù)組數(shù)
% 網(wǎng)絡(luò)訓(xùn)練參數(shù)
if (TrainPara == -1)
df = 25; %顯示間隔次數(shù) 25
me = 1000; %最大循環(huán)次數(shù) 1000
eg = 0.001; %目標(biāo)誤差 0.02
lr = 0.001; %學(xué)習(xí)速率 0.001
lr_inc = 0.001; %學(xué)習(xí)速率增加比率 0.001
lr_idec = 10; %學(xué)習(xí)速率減少比率 10
mom_const = 0.1; %動量常數(shù) 0.1
err_ratio = 1e10; %最大誤差比率 1e10
else
df=TrainPara(1); %顯示間隔次數(shù) 25
me=TrainPara(2); %最大循環(huán)次數(shù) 1000
eg=TrainPara(3); %目標(biāo)誤差 0.02
lr=TrainPara(4); %學(xué)習(xí)速率 0.001
lr_inc=TrainPara(5); %學(xué)習(xí)速率增加比率 0.001
lr_idec=TrainPara(6); %學(xué)習(xí)速率減少比率 10
mom_const=TrainPara(7); %動量常數(shù) 0.1
err_ratio=TrainPara(8); %最大誤差比率 1e10
end
% 輸入層到中間層的傳遞函數(shù)
if (length(InputFun)==0)
InputFun = 'tansig';
end
% 中間層到輸出層的傳遞函數(shù)
if (length(OutputFun)==0)
OutputFun = 'purelin';
end
tp=[df me eg lr lr_inc lr_idec mom_const err_ratio];
%tp=[df me eg 0.001 0.001 10 0.1 1e10];
frin_para=fopen(sprintf('input_para%s%s',ModelNo,'.txt'),'r'); %輸入數(shù)據(jù)文件
frout_para=fopen(sprintf('output_para%s%s',ModelNo,'.txt'),'r'); %輸出數(shù)據(jù)文件
[p,count]=fscanf(frin_para,'%f',[InputDim,data_num]); %取輸入數(shù)據(jù)
[t,count]=fscanf(frout_para,'%f',[OutputDim,data_num]); %取輸出數(shù)據(jù)
fclose(frin_para);
fclose(frout_para);
[r,q]=size(p); [s2,q]=size(t);
[w1,b1]=rands(MidDim,r);
[w2,b2]=rands(s2,MidDim);
NNTWARN OFF
[w1,b1,w2,b2,epochs,errors]=trainlm(w1,b1,InputFun,w2,b2,OutputFun,p,t,tp);
%將網(wǎng)絡(luò)訓(xùn)練結(jié)果寫入文件
fww1=fopen(sprintf('w%s%s',ModelNo,'1.dat'),'w');
fwb1=fopen(sprintf('b%s%s',ModelNo,'1.dat'),'w');
fww2=fopen(sprintf('w%s%s',ModelNo,'2.dat'),'w');
fwb2=fopen(sprintf('b%s%s',ModelNo,'2.dat'),'w');
fprintf(fww1,'%9.4f ',w1);
fprintf(fwb1,'%9.4f ',b1);
fprintf(fww2,'%9.4f\n',w2);
fprintf(fwb2,'%9.4f\n',b2);
fclose(fww1);
fclose(fwb1);
fclose(fww2);
fclose(fwb2);
%將訓(xùn)練過程誤差寫入誤差文件
ferr=fopen(sprintf('lm_err%s%s',ModelNo,'.dat'),'w');
fprintf(ferr,'%10.6f\n',errors);
fclose(ferr);
cd(olddir);
retstr=epochs;
close all;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -