1.神經網絡工具箱概述
Matlab神經網絡工具箱幾乎包含了現有神經網絡的最新成果,神經網絡工具箱模型包括感知器、線性網絡、BP網絡、徑向基函數網絡、競爭型神經網絡、自組織網絡和學習向量量化網絡、反饋網絡。本文只介紹BP神經網絡工具箱。
2.BP神經網絡工具箱介紹
BP神經網絡學習規則是不斷地調整神經網絡的權值和偏值,使得網絡輸出的均方誤差和最小。下面是關於一些BP神經網絡的創建和訓練的名稱:
(1)newff:創建一前饋BP網絡(隱含層只有一層)
(2)newcf:創建一多層前饋BP網絡(隱含層有多層)
(3)train:訓練一個神經網絡
(4)sim:仿真一個神經網絡
以上幾個是最主要的語句,在后面的實例應用中會詳細說明用法。
3.BP神經網絡工具箱在函數逼近中的應用
BP神經網絡具有很強的映射能力,主要用於模式識別分類、函數逼近、函數壓縮等。下面通過實例來說明BP網絡在函數逼近方面的應用。
本文需要逼近的函數是f(x)=1+sin(k*pi/2*x),其中,選擇k=2進行仿真,設置隱藏層神經元數目為n,n可以改變,便於后面觀察隱藏層節點與函數逼近能力的關系。
3.1 k=2,n=5時的仿真實驗
先作出目標曲線的圖形,以下為matlab代碼:
clear all clc %%%%%%%%%%設置網絡輸入值和目標值%%%%%%%%%% k=2;%f(x)中的k值 x=[-1:.05:8]; f=1+sin(k*pi/2*x); plot(x,f,'-'); title('要逼近的非線性函數'); xlabel('時間'); ylabel('非線性函數');
接着用newff函數建立BP神經網絡結構,以下為matlab代碼:
%%%%%%%%%%建立網絡%%%%%%%%%% n=5;%隱藏層節點數 net = newff(minmax(x),[n,1],{'tansig' 'purelin'},'trainlm'); %對於初始網絡,可以應用sim()函數觀察網絡輸出。 y1=sim(net,x); figure; plot(x,f,'-',x,y1,':') title('未訓練網絡的輸出結果'); xlabel('時間'); ylabel('仿真輸出--原函數-');
代碼中的tansig和purelin分別是隱藏層神經元激活函數和輸出層神經元激活函數,trainlm是訓練函數(Levenberg-Marquardt算法訓練BP網絡)
仿真效果如下:
我們可以看到仿真的函數與目標函數相差甚遠,這是因為使用newff()函數建立函數網絡時,權值和閾值的初始化是隨機的,所以網絡輸出結構很差,根本達不到函數逼近的目的。
因此接下來應用train()函數對網絡進行訓練后再進行仿真。訓練之前,需要預先設置網絡訓練參數,這里只設置了訓練的迭代次數和訓練精度,其余參數使用默認值。訓練神經網絡的matlab代碼如下:
%%%%%%%%%%設置訓練網絡參數%%%%%%%%%%
net.trainParam.epochs=200; %網絡最大迭代次數設置為200
net.trainParam.goal=0.2; %網絡訓練精度設置為0.2
net=train(net,x,f); %開始訓練網絡;
訓練后 得到的誤差變化過程如下圖所示,可以看出,在運行到第145步時,網絡輸出誤差達到設定的訓練精度。
訓練好的網絡進行仿真,代碼如下:
%%%%%%%%%%仿真網絡%%%%%%%%%% y2=sim(net,x); figure; plot(x,f,'-',x,y1,':',x,y2, '--') title('訓練后網絡的輸出結果'); xlabel('時間'); ylabel('仿真輸出');
繪制網絡輸出曲線,與目標曲線和未訓練網絡的輸出結果相比較,如下圖所示:
由此可以看出,與未訓練的曲線相比,經過訓練之后的曲線和目標曲線更接近,這說明BP網絡對非線性函數的逼近效果比較好。
接下來通過改變隱藏層的節點數來看其對網絡逼近的效果
3.2 k=2,n=3、n=10時的仿真實驗
將隱藏層節點數改為3,其他條件不變,仿真效果如下:
將隱藏層節點數改為10,其他條件不變,仿真效果如下:
由以上兩張圖可以看出,當n=10時,經過訓練后的曲線基本跟目標曲線重合;當n=3時,逼近效果卻很差,這說明改變隱藏層節點數對函數逼近的效果有一定影響。
4.總結
一般來說,隱藏層神經元數目越多,則BP網絡逼近非線性函數的能力越強。由於本例中單隱含層的輸入層和輸出層神經元個數均為1,那么隱含層的個數可以根據設計經驗公式和該問題的實際情況相結合,通過實驗選取最好的隱藏層節點數,使得逼近效果最佳。