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