matlab卷积完为什么要归一化,为什么要进行反归一化处理,而且反归一化什么意思?...
歸一化處理我理解,但是很多例子的反歸一化我就不是很明白 。如下面這個例子:
%準備好訓練集
%人數(單位:萬人)
numberOfPeople=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
%機動車數(單位:萬輛)
numberOfAutomobile=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];
%公路面積(單位:萬平方公里)
roadArea=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];
%公路客運量(單位:萬人)
passengerVolume = [5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];
%公路貨運量(單位:萬噸)
freightVolume = [1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];
%輸入數據矩陣
p = [numberOfPeople; numberOfAutomobile; roadArea];
%目標(輸出)數據矩陣
t = [passengerVolume; freightVolume];
%對訓練集中的輸入數據矩陣和目標數據矩陣進行歸一化處理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);
%建立BP神經網絡
net = newff(pn, tn, [3 7 2], {'purelin', 'logsig', 'purelin'});
%每10輪回顯示一次結果
net.trainParam.show = 10;
%最大訓練次數
net.trainParam.epochs = 5000;
%網絡的學習速率
net.trainParam.lr = 0.05;
%訓練網絡所要達到的目標誤差
net.trainParam.goal = 0.65 * 10^(-3);
%網絡誤差如果連續6次迭代都沒變化,則matlab會默認終止訓練。為了讓程序繼續運行,用以下命令取消這條設置
net.divideFcn = '';
%開始訓練網絡
net = train(net, pn, tn);
%使用訓練好的網絡,基于訓練集的數據對BP網絡進行仿真得到網絡輸出結果
%(因為輸入樣本(訓練集)容量較少,否則一般必須用新鮮數據進行仿真測試)
answer = sim(net, pn);
%反歸一化
answer1 = mapminmax('reverse', answer, outputStr);
%繪制測試樣本神經網絡輸出和實際樣本輸出的對比圖(figure(1))-------------------------------------------
t = 1990:2009;
%測試樣本網絡輸出客運量
a1 = answer1(1,:);
%測試樣本網絡輸出貨運量
a2 = answer1(2,:);
figure(1);
subplot(2, 1, 1); plot(t, a1, 'ro', t, passengerVolume, 'b+');
legend('網絡輸出客運量', '實際客運量');
xlabel('年份'); ylabel('客運量/萬人');
title('神經網絡客運量學習與測試對比圖');
grid on;
subplot(2, 1, 2); plot(t, a2, 'ro', t, freightVolume, 'b+');
legend('網絡輸出貨運量', '實際貨運量');
xlabel('年份'); ylabel('貨運量/萬噸');
title('神經網絡貨運量學習與測試對比圖');
grid on;
%使用訓練好的神經網絡對新輸入數據進行預測
%新輸入數據(2010年和2011年的相關數據)
newInput = [73.39 75.55; 3.9635 4.0975; 0.9880 1.0268];
%利用原始輸入數據(訓練集的輸入數據)的歸一化參數對新輸入數據進行歸一化
newInput = mapminmax('apply', newInput, inputStr);
%進行仿真
newOutput = sim(net, newInput);
%反歸一化
newOutput = mapminmax('reverse',newOutput, outputStr);
disp('預測2010和2011年的公路客運量分別為(單位:萬人):');
newOutput(1,:)
disp('預測2010和2011年的公路貨運量分別為(單位:萬噸):');
newOutput(2,:)
%在figure(1)的基礎上繪制2010和2011年的預測情況-------------------------------------------------------
figure(2);
t1 = 1990:2011;
subplot(2, 1, 1); plot(t1, [a1 newOutput(1,:)], 'ro', t, passengerVolume, 'b+');
legend('網絡輸出客運量', '實際客運量');
xlabel('年份'); ylabel('客運量/萬人');
title('神經網絡客運量學習與測試對比圖(添加了預測數據)');
grid on;
subplot(2, 1, 2); plot(t1, [a2 newOutput(2,:)], 'ro', t, freightVolume, 'b+');
legend('網絡輸出貨運量', '實際貨運量');
xlabel('年份'); ylabel('貨運量/萬噸');
title('神經網絡貨運量學習與測試對比圖(添加了預測數據)');
grid on;
預測的時候反歸一化為啥呀
總結
以上是生活随笔為你收集整理的matlab卷积完为什么要归一化,为什么要进行反归一化处理,而且反归一化什么意思?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python tesseract ocr
- 下一篇: 24口光纤配线架 cad块_光纤配线架c