matlab中bp神经网络梯度怎么调精度,如何提高BP神经网络模型的预测精度?
請高人指點(diǎn),以下為我為畢業(yè)論文設(shè)計的BP神經(jīng)網(wǎng)絡(luò),目前存在兩個問題:
1.模型預(yù)測精度特別低。
我已經(jīng)嘗試改變隱含層節(jié)點(diǎn)數(shù)(從20到100都一一試過了),并將傳遞函數(shù)和訓(xùn)練函數(shù)都做了替換,但均無明顯效果。不知該從何處著手提高模型的預(yù)測和訓(xùn)練精度。
2.每次程序運(yùn)行完,都要提示錯誤,貌似是運(yùn)算符合不對,但是改過之后依然有誤。不知該怎么改?clc;
clear;
close all;
warning off;
tic;
%用2012年數(shù)據(jù)創(chuàng)建模型,2011年數(shù)據(jù)驗證模型精確度。 自動讀取文本文檔,第一行為農(nóng)學(xué)參數(shù),第二行至最后一行都為光譜值。
data1=importdata('E:\2012SR.txt');
data2=importdata('E:\2011SR.txt');
M1 = size(data1,2);%行
Y1 = data1(1,1:M1);%第一行所有列,農(nóng)學(xué)參數(shù),2012
M2 = size(data2,2);
Y2 = data2(1,1:M2);%第一行所有列,農(nóng)學(xué)參數(shù),2011
P =data1(2:size(data1,1),:);? ?? ?%2012年光譜數(shù)據(jù),文本里第二行開始,所有列
T = Y1 ;? ? %2012年農(nóng)學(xué)參數(shù),第一行所有列
N2011_validation=data2(2:size(data2,1),:) ;??%2011年光譜數(shù)據(jù),文本里第二行開始,所有列
N2012_data=P;? ?? ? %2012年光譜數(shù)據(jù)
net=newff(P,T,[61 1],{'tansig' 'purelin'},'traingd')
t1? ?? ?? ?? ?? ?? ?? ? = clock;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%計時開始
net? ?? ?? ?? ?? ?? ?? ?= fitnet(70);
net.trainParam.epochs? ?= 5000;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %設(shè)置訓(xùn)練次數(shù)
net.trainParam.goal? ???= 0.01;? ?? ?? ?? ?? ?? ?? ?? ?? ? %設(shè)置性能函數(shù)(訓(xùn)練要求精度)
net.trainParam.show? ???= 1;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %每10顯示
net.trainParam.Ir? ?? ? = 0.005;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%設(shè)置學(xué)習(xí)速率
net? ?? ?? ?? ?? ?? ?? ?= train(net,P,T);? ?? ?? ?? ?? ?? ?%訓(xùn)練BP網(wǎng)絡(luò)(P為輸入,T為輸出)
datat? ?? ?? ?? ?? ?? ? = etime(clock,t1);
Nets? ?? ?? ?? ?? ?? ???= net;
view(Nets);
%2011年數(shù)據(jù)進(jìn)行驗證
y = sim(net,N2011_validation);
figure;
plot(y,'k-x');hold on
plot(N2011_validation(1:126),'.k');hold on
ymin=-1;
ymax=4;
axis([0 length(N2011_validation) floor(ymin) ceil(ymax)]);
legend('Pridicted values','Measured values');
title('模型預(yù)測結(jié)果, 煙葉N含量');
%2012年數(shù)據(jù)進(jìn)行測試
y1=sim(net,N2012_data);
figure;
plot(y1,'k-x');
hold on;
plot(N2012_data(1:102),'.k');
ymin=0;
ymax=4;
axis([0 length(N2012_data) floor(ymin) ceil(ymax)]);
legend('Pridicted values','Measured values');
title('模型訓(xùn)練結(jié)果, 煙葉N含量');
%導(dǎo)入到文本文件
fid=fopen('E:\2012SR1.txt','wt');
if fid == -1
error('文件打開失敗');
end
fprintf(fid,'實際值 預(yù)測值\n');
A=[N2012_data;y1];
fprintf(fid,'%f %f\n',A);
fclose(fid);
fid=fopen('E:\2011SR1.txt','wt');
if fid == -1
error('文件打開失敗');
end
fprintf(fid,'實際值 預(yù)測值\n');
A=[N2011_validation;y];
fprintf(fid,'%f %f\n',A);
fclose(fid);
%預(yù)測效果分析
for i = 1:length(N2011_validation);
K(i)??= abs(y(i) - N2011_validation(i))/(N2011_validation(i));
end
RMSE = sqrt(sum((y-N2011_validation)*(y-N2011_validation)')/length(N2011_validation))
E= 1-sum((y-N2011_validation)*(y-N2011_validation)')/sum((N2011_validation-mean(N2011_validation))*(N2011_validation-mean(N2011_validation))')
k= average(sum(abs((y-N2011_validation)/(N2011_validation))))
%訓(xùn)練效果分析
for i = 1:length(N2012_data);
K_1(i)??= average(sum(abs((y1(i)-N2012_data(i))/(N2012_data(i)))));
end
RMSE_1=sqrt(sum((y1-N2012_data)*(y1-N2012_data)')/length(N2012_data))
E_1= 1-sum((y1-N2012_data)*(y1-N2012_data)')/sum((N2012_data-mean(N2012_data))*(N2012_data-mean(N2012_data))')
k_1 = average(sum(abs((y1-N2012_data)/(N2012_data))))
2012-12-30 17:23 上傳
點(diǎn)擊文件名下載附件
30.54 KB, 下載次數(shù): 514
2012-12-30 17:23 上傳
點(diǎn)擊文件名下載附件
23.52 KB, 下載次數(shù): 391
總結(jié)
以上是生活随笔為你收集整理的matlab中bp神经网络梯度怎么调精度,如何提高BP神经网络模型的预测精度?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骑士人才系统渗透
- 下一篇: QPSK信号在高斯信道、瑞利信道、Ric