BP神經網路之MATLAB@GUI篇
設計BP神經網絡方法
使用BP神經網路解決問題時,需要一個訓練資料集,此外還需要確定以下引數:
(1)網路層數
BP網路可以包含1到多個隱層,單隱層前饋網路已具有很大的學習。因此對於大部分場合,單個隱層即可滿足需求。面對大資料,從增加模型複雜度角度來說,增加隱層數目比增加隱層神經節點數更有效,因為增加隱層數目不僅增加了擁有啟用函式的神經元數目,還增加了記過函式巢狀的層數。但隨著隱層數目增加,網路收斂難度加大,傳統BP演算法很難實現。
(2)輸入層節點數、輸出層節點個數
輸入層節點數取決於輸入向量的維數、輸出層節點數取決於目標結果。實際應用時,首先應將問題提煉出向量模型用於表述輸入、輸出。
(3)隱含層節點數
隱含層節點數的選擇對網路影響很大,數目較多會帶來更好的效能,但訓練難度也會變大,一般採用經驗公式估計節點數,例如:
a.M = 根號下(n+m)+a,n、m分別為輸入層、輸出層神經元個數,a是0到10之間常數
b.M = log2(n),n為輸入層神經元個數
(4)傳遞函式選擇
一般隱含層使用Sigmoid函式,而輸出層使用線性函式。如果輸出層也採用Sigmoid函式,則輸出結果為[0,1]或[-1,1]。
(5)訓練函式選擇
針對不同型別問題,選擇不同訓練函式。例如對於包含數百個權值的迴歸問題,LM收斂速度快,誤差小。但LM佔用記憶體大,模式識別問題處理能力弱,RPROP是更好的選擇。(MATLAB中所有訓練函式在後文列出)
(7)初始權值賦值
引數的初始值對訓練過程有著重大的影響。對引數初始化的原則是:引數應該隨機初始化在能讓sigmoid函式線上性區域啟用的值。如果引數全部都很大,那sigmoid一開始就飽和了,這樣就會得到一個非常小的梯度值,那引數更新就會很慢,訓練也會很慢。如果引數太小了,那梯度也會很小,同樣也會導致訓練很慢。
下面進入正題:MATLAB為BP神經網路的使用提供強大的模擬工具,除了一些函式外,更直觀、簡單的就是GUI的使用,簡化了眾多引數的設定,使得設計、模擬過程更加簡單。
在命令介面輸入nnstart命令
有四個選項,分別解決不同問題:
(1)迴歸問題
(2)歸類問題(監督學習)
(3)聚類問題(非監督學習)
(4)非線性時間序列問題
此外,GUI介面的BP網路隱含層只有1層,不能修改。
選擇Fitting app
接下來是輸入資料,可以選擇自己已經匯入工作空間的資料,或者使用load example data set匯入matlab的一些預設實驗資料,我這裡選擇bodyfat,根據人體的年齡、身高、體重等個13個輸入資訊預測肥胖係數。輸入資料大小13*253,輸出資料大小1*253。
接下來是訓練資料、修正資料、測試資料的比重。修正資料的作用是對訓練結果作一定調整,提升泛化能力,防止過擬合,GUI內訓練資料比重是不能調整的,其他兩個可以。
選擇隱含層神經元結點數(預設為10)。
選擇訓練方法,提供了3種方式,預設為LM演算法。
此外,MATLAB提供了多種資料訓練方式,在CODE模式下均可使用。LM演算法訓練資料通常是最快的,同樣BFGS quasi-Newton演算法速度也很快;但當資料規模較大時,這兩種演算法由於佔用記憶體較大效率較低,此時SCG(分類問題)和RP演算法是更好的選擇;當資料規模較小且包含噪聲時,可以選擇BR演算法。
有關這些學習演算法的詳細對比可以在matlab中搜尋Choose a Multilayer Neural Network Training Function
訓練完畢後,可以繪製迴歸曲線還有誤差直方圖。
迴歸曲線描述了網路對訓練資料、修正資料、測試資料的擬合能力,理想情況下45°直線代表輸出和目標完全相同。
誤差直方圖描述了不同誤差對應點數的分佈情況。可以根據直方圖對資料做一些評價,例如:
(1)如果部分訓練資料(佔比很少)偏離中心較多,則可認為這部分資料可能是有錯誤的
(2)如果修正資料大部分集中在邊緣,則說明原資料的過於重複,不具備泛化能力,可能需要新增更多資料,重新訓練
如果對以上評價結果不滿意的話,可以重新訓練,調整學習方法,增加隱層節點數,增加資料量等。
最後可以將GUI做所的事情轉換為程式碼,方便閱讀:
Generate Scripts是將GUI執行命令轉換為程式碼,方便學習相應的函式。
Generate Scripts產生的程式碼如下:
% This script assumes these variables are defined:
%
% bodyfatInputs - input data.
% bodyfatTargets - target data.
x = bodyfatInputs;
t = bodyfatTargets;
% Choose a Training Function
% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.
% 'trainscg' uses less memory. NFTOOL falls back to this in low memory situations.
trainFcn = 'trainlm'; % Levenberg-Marquardt
% Create a Fitting Network
hiddenLayerSize = 10;
net = fitnet(hiddenLayerSize,trainFcn);
% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
% Train the Network
[net,tr] = train(net,x,t);
% Test the Network
y = net(x);
e = gsubtract(t,y);
performance = perform(net,t,y)
% View the Network
view(net)
執行一下Generate Scripts程式碼,得到:
Algorithms中描述了資料分組方式、訓練方法以及評級函式。Process中描述了迭代次數、耗費時間、修正次數、初始誤差/結束誤差、初始梯度/結束梯度等。其中可以設定最大迭代次數、最小誤差、最小梯度都可以作為訓練神經網路的結束條件,在CODE模式都可以執行。
用CODE執行的好處在於可以檢視迭代過程中誤差、梯度等變化情況,例如誤差圖:
如有問題,敬請指正~
相關文章
- BP神經網路神經網路
- 神經網路篇——從程式碼出發理解BP神經網路神經網路
- BP神經網路流程圖神經網路流程圖
- bp神經網路學習神經網路
- 資料探勘---BP神經網路神經網路
- 機器學習——BP神經網路演算法機器學習神經網路演算法
- 為什麼說BP神經網路就是人工神經網路的一種?神經網路
- Andrew BP 神經網路詳細推導神經網路
- python對BP神經網路實現Python神經網路
- AI BP神經網路判斷手寫數字AI神經網路
- 深度神經網路(DNN)反向傳播演算法(BP)神經網路DNN反向傳播演算法
- 神經網路之卷積篇:詳解經典網路(Classic networks)神經網路卷積
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- 構建兩層以上BP神經網路(python程式碼)神經網路Python
- 《TensorFlow2.0》前饋神經網路和 BP 演算法神經網路演算法
- 基於Matlab的BP神經網路分段插值模擬Matlab神經網路
- 資料探勘(9):BP神經網路演算法與實踐神經網路演算法
- 【深度學習基礎-08】神經網路演算法(Neural Network)上--BP神經網路例子計算說明深度學習神經網路演算法
- Tensorflow系列專題(四):神經網路篇之前饋神經網路綜述神經網路
- 【深度學習基礎-07】神經網路演算法(Neural Network)上--BP神經網路基礎理論深度學習神經網路演算法
- 神經網路:numpy實現神經網路框架神經網路框架
- 神經網路神經網路
- 【原創】python實現BP神經網路識別Mnist資料集Python神經網路
- CNN神經網路之卷積操作CNN神經網路卷積
- AI之(神經網路+深度學習)AI神經網路深度學習
- 神經網路入門篇之深層神經網路:詳解前向傳播和反向傳播(Forward and backward propagation)神經網路反向傳播Forward
- 神經網路基礎篇神經網路
- LSTM神經網路神經網路
- 8、神經網路神經網路
- 模糊神經網路神經網路
- 聊聊從腦神經到神經網路神經網路
- 機器學習之訓練神經網路:最佳做法機器學習神經網路
- 【機器學習】之第五章——神經網路機器學習神經網路
- 圖神經網路GNN 庫,液體神經網路LNN/LFM神經網路GNN
- 粒子群優化演算法對BP神經網路優化 Matlab實現優化演算法神經網路Matlab
- (五)神經網路入門之構建多層網路神經網路
- 卷積神經網路卷積神經網路