BP神经网络拟合函数
摘要:
????????采用BP神經網絡擬合目標函數,并添加高斯隨機噪聲,通過使用feedforwardnet函數構建BP神經網絡進行函數擬合。通過調試設定的參數及所使用的訓練函數,得出結論:BP神經網絡可以較好地解決黑盒問題。且隨著設定參數的提升及采用的訓練函數的改變,會對BP神經網絡的擬合效果造成較大的影響,因此要想得到較好的擬合效果,需要設定合適的訓練參數及采用對應情況下的訓練函數。
1.1 BP神經網絡原理
????????BP神經網絡是一種按誤差反向傳播(簡稱誤差反傳)訓練的多層前饋網絡,其算法稱為BP算法,它的基本思想是梯度下降法,利用梯度搜索技術,以期使網絡的實際輸出值和期望輸出值的誤差均方差為最小。
????????基本BP算法包括信號的前向傳播和誤差的反向傳播兩個過程:即計算誤差輸出時按從輸入到輸出的方向進行,而調整權值和閾值則從輸出到輸入的方向進行。正向傳播時,輸入信號通過隱含層作用于輸出節點,經過非線性變換,產生輸出信號,若實際輸出與期望輸出不相符,則轉入誤差的反向傳播過程。誤差反傳是將輸出誤差通過隱含層向輸入層逐層反傳,并將誤差分攤給各層所有單元,以從各層獲得的誤差信號作為調整各單元權值的依據。通過調整輸入節點與隱層節點的聯接強度和隱層節點與輸出節點的聯接強度以及閾值,使誤差沿梯度方向下降,經過反復學習訓練,確定與最小誤差相對應的網絡參數(權值和閾值),訓練即告停止。此時經過訓練的神經網絡即能對類似樣本的輸入信息,自行處理輸出誤差最小的經過非線形轉換的信息。
1.2 實驗步驟
????????步驟一:從目標函數 y=sin(x)*ln(x)上隨機取樣 2000 個點,其中 x 值的范圍為[0,20]。加入最大值為 0.1 的高斯隨機噪聲;
????????步驟二:利用 feedforwardnet 函數構建 4 層神經網絡(1 層輸入層, 2 層隱藏層分別包含 30/15 個神經元, 1 層輸出層);
????????步驟三:將隱藏層的激活函數設置為 tansig,訓練算法采用 trainlm,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000;
????????步驟四:訓練網絡,得到預測值,將預測值和實際值繪制到一張二維圖上,輸出擬合準確率。
源代碼如下:
%% 采用feedforwardnet構建BP神經網絡進行函數擬合 %% 清理參數及原始變量 clear al1; close all; clc; %% 生成數據集,從目標函數上采樣2000個點 x=rand(1,2000)*20; x=sort(x); y=sin(x).*log(x)+0.1.*randn(1,2000);%% 神經網絡擬合目標函數 net=feedforwardnet([20,10],'trainrp'); net.trainparam.show=50; net.trainparam.epochs=2000; net.trainparam.goal=1e-3; net.trainParam.lr=0.01; net=train(net,x,y); view(net) y1=net(x);%% 統計擬合正確率(95%置信區間) n=length(y1); hitNum=0; for i=1:nif(abs((y(1,i)-y1(1,i))/y(1,i))<=0.05) hitNum=hitNum+1; end end sprintf('正確識別率是 %3.2f%%',100*hitNum/n)%% 繪制對比圖 plot(x,y,'r*'); hold on; plot(x, y1,'g-','linewidth',1.5); title(['訓練函數:trainrp' ' ' '訓練精度:0.001' ' ' '第1層隱藏層神經元個數:20' ' ' '第2層隱藏層神經元個數:10' ' ' '擬合正確率:' num2str(100*hitNum/n) '%']);1.3 實驗結果
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含2/1個神經元,訓練算法采用 trainlm,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.1
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含6/3個神經元,訓練算法采用 trainlm,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.2? ??
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含10/5個神經元,訓練算法采用 trainlm,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.3
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含20/10個神經元,訓練算法采用 trainlm,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.4
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含20/10個神經元,訓練算法采用 trainlm,目標誤差為 0.1,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.5
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含20/10個神經元,訓練算法采用 trainlm,目標誤差為 0.01,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.6? ? ??
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含20/10個神經元,訓練算法采用 trainlm,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.7
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含20/10個神經元,訓練算法采用 trainbr,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.8
????????隱藏層激活函數設置為 tansig,2層隱藏層分別包含20/10個神經元,訓練算法采用 trainrp,目標誤差為 0.001,學習率為 0.01,最大迭代次數為 2000時,實驗結果如下圖所示:
圖1.9
1.4 不同參數下的結果與分析
| 訓練函數 | 訓練精度 | 第1層隱藏層 神經元個數 | 第2層隱藏層 神經元個數 | 擬合正確率 |
| trainlm | 0.001 | 2 | 1 | 3.40% |
| trainlm | 0.001 | 6 | 3 | 45.25% |
| trainlm | 0.001 | 10 | 5 | 41.95% |
| trainlm | 0.001 | 20 | 10 | 46.10% |
| trainlm | 0.1 | 20 | 10 | 34.90% |
| trainlm | 0.01 | 20 | 10 | 42.60% |
| trainlm | 0.001 | 20 | 10 | 46.05% |
| trainbr | 0.001 | 20 | 10 | 47.80% |
| trainrp | 0.001 | 20 | 10 | 40.85% |
表1
????????從表1中不同參數下得到的結果可以看出:
????????針對復合函數的擬合,采用feedforwardnet函數構建BP神經網絡可以得到較好的擬合曲線,由于添加高斯隨機噪聲,所以擬合正確率不能達到很高,但是擬合出來的曲線可以較好地反映出目標函數的變化趨勢。
????????同時,觀察不同參數下得到的結果可以發現,隨著隱藏層神經元數量的增加,BP神經網絡擬合曲線的效果也越來越好,但是當神經元達到一定的數量時,擬合效果會達到一個瓶頸,不能再有顯著提升;隨著訓練精度的不斷提高,BP神經網絡擬合曲線的效果也越來越好;不同的訓練函數有各自的的特點:
????????(1)trainlm函數是Levenberg-Marquardt算法,對于中等規模的BP神經網絡有最快的收斂速度,是系統默認的算法。由于其避免了直接計算赫賽矩陣,從而減少了訓練中的計算量,但需要較大內存量;
????????(2)trainbr函數是在Levenberg-Marquardt算法的基礎上進行修改,以使網絡的泛化能力更好,同時降低了確定最優網絡結構的難度;
????????(3)trainrp函數是有彈回的BP算法,用于消除梯度模值對網絡訓練帶來的影響,提高訓練的速度(主要通過delt_inc和delt_dec來實現權值的改變。
????????由于BP神經網絡能夠較為方便的解決黑盒問題,它被廣泛用于解決各種問題。神經網絡的效果及收斂取決于所采用數據集、設定的參數及采用的訓練函數。
總結
以上是生活随笔為你收集整理的BP神经网络拟合函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正确姿势使用TraceView工具
- 下一篇: ctfmon.exe windows输入