BP神经网络实用性操作(四步模板)和主要网络参数介绍
一.推薦
本文不再介紹神經網絡的基本概念和推到過程,博主還是會給出推薦:
1.MATLAB方面 ——(1)BP神經網絡計算原理: 推薦CSDN的博主:奔跑的Yancy,網址如下:https://blog.csdn.net/lyxleft/article/details/82840787
(備注: 這篇博客中的BP推到過程中輸入的正向傳遞,反向誤差傳遞寫的都挺好)
(2)BP公式推導方面:博主:zhiyong_will,網址:https://blog.csdn.net/google19890102/article/details/32723459
2.C語言方面——推薦博客:博主:一朝英雄拔劍起,網址:https://blog.csdn.net/qq_39545674/article/details/82495569
3.Python方面——推薦博主:liu_coding,網址:https://blog.csdn.net/net_wolf_007/article/details/52055718
(備注: 當然,也可以完全忽略以上推薦的內容,以上是博主為自己記下的幾個還可以的BP方面的相關博客,方便更加全面了解)
二.正文
因為,BP神經網絡方面不管還是原理還是推到過程亦或是MATLAB、C語言或是Python都已經被大量介紹過了,但是幾乎很少有快速上手的指導內容,本文 (1)基于MATLAB工具箱,給出 (2)具體四步驟實現使用操作,并主要介紹 (3)設置參數的具體意義。
1.加載數據
%% 1.加載訓練數據 data=xlsread('。。。。.xlsx'); exercise=[]' tagret=data()';2.建立BP神經網絡,MATLAB中神經網絡使用newff函數
%2.net = newff(minmax(p),[隱含層的神經元個數,輸出層的神經元個數],{隱層神經元的傳輸函數TF1,輸出層的傳輸函數TF2},'反向傳播的訓練函數') %一般在這里還有其他的傳輸的函數一般的如下,如果預測出來的效果不是很好,可以調節 %TF1 = 'tansig';TF2 = 'logsig'; %TF1 = 'logsig';TF2 = 'purelin'; %TF1 = 'logsig';TF2 = 'logsig'; %TF1 = 'purelin';TF2 = 'purelin'; % 指定訓練參數 % net.trainFcn = 'traingd'; % 梯度下降算法 % net.trainFcn = 'traingdm'; % 動量梯度下降算法 % net.trainFcn = 'traingda'; % 變學習率梯度下降算法 % net.trainFcn = 'traingdx'; % 變學習率動量梯度下降算法 % (大型網絡的首選算法) % net.trainFcn = 'trainrp'; % RPROP(彈性BP)算法,內存需求最小 % 共軛梯度算法 % net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法 % net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,內存需求比Fletcher-Reeves修正算法略大 % net.trainFcn = 'traincgb'; % Powell-Beal復位算法,內存需求比Polak-Ribiere修正算法略大 % (大型網絡的首選算法) %net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,內存需求與Fletcher-Reeves修正算法相同,計算量比上面三種算法都小很多 % net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,計算量和內存需求均比共軛梯度算法大,但收斂比較快 % net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,計算量和內存需求均比BFGS算法小,比共軛梯度算法略大 % (中型網絡的首選算法) %net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,內存需求最大,收斂速度最快 % net.trainFcn = 'trainbr'; % 貝葉斯正則化算法 % 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm' %在這里一般是選取'trainlm'函數來訓練,其算對對應的是Levenberg-Marquardt算法3.網絡參數的設置
這里的參數主要為以下內容:
(1)隱含層層數:一般為一層,最基礎實用簡單計算量少;
(2)各層神經元個數:輸入層和輸出層有時隨著系統的確定神經元個數差不多就已確定,例如電池BMS系統,如果使用BP那么輸入信號一般兩個(電流和電壓)或者三個(電流電壓溫度),輸出信號一般一個(SOC數值);另外隱含層神經元個數我推薦不要少于5個;
(3)設置訓練目標誤差:根據系統設置,比如輸出值為0-1之間的數,精度要求預測值和實際值誤差在0.01以內,那目標誤差理論上只要你設置小于這個誤差一個數量級以下,為了盡量改善收斂效果,加大收斂力度還是目標誤差設置較小一點比較恰當,不然容易提前中斷訓練。
(4)顯示訓練結果的時間間隔步數:這個跟你輸入數據的時間間隔有關,訓練時間間隔是輸入采樣時間的整數倍即可,我推薦就等于輸入數據的采樣時間;
(5)訓練次數設置:離線情況下,訓練次數要小于輸入總的采樣次數(總的采樣次數=總的采樣時間/采樣時間),但訓練次數又不能太小,否者造成訓練不充分,訓練結果沒有收斂,應該是總的采樣次數的后20%區間。
(6)訓練允許時間,默認值INF:這個采取默認值即可;
(7)學習率,默認值為0.01:學習率和誤差反向傳播修正權值的步長關系很大;
(8)動力因子,缺省為0.9:下面詳細介紹;
(9)最小性能梯度:下面詳細介紹。
4.計算仿真,一般采用sim函數
Y=sim(net,exercise);5.進入MATLAB的工具箱界面
?
第一部分,即Neural Network,圖形顯示的是神經網絡的結構圖,可知有一個隱層一個輸出層;
第二部分,即Algorithms,顯示的是訓練算法,這里為學習率自適應的梯度下降BP算法;誤差指標為MSE;
第三部分,即Progress,顯示訓練進度:
Epoch:訓練次數;在其右邊顯示的是最大的訓練次數,可以設定,上面例子中設為300;而進度條中顯示的是實際訓練的次數,上面例子中實際訓練次數為146次。
Time:訓練時間,也就是本次訓練中,使用的時間
Performance:性能指;本例子中為均方誤差(mse)的最大值。精度條中顯示的是當前的均方誤差;進度條右邊顯示的是設定的均方誤差(如果當前的均方誤差小于設定值,則停止訓練),這個指標可以用用.trainParam.goal參數設定。
Gradiengt:梯度;進度條中顯示的當前的梯度值,其右邊顯示的是設定的梯度值。如果當前的梯度值達到了設定值,則停止訓練。
validation check為泛化能力檢查(若連續6次訓練誤差不降反升,則強行結束訓練)
第四部分,即Plots,為作圖。分別點擊三個按鈕能看到誤差變化曲線,分別用于繪制當前神經網絡的性能圖,訓練狀態和回歸分析。
6.幾個參數介紹
(1)動力因子: 這個參數常常沒有被很好的重視,其是BP批處理訓練時會陷入局部最小,也就是誤差本身基本上已不變化,其返回的信號對權值調整很小,但總誤差大于訓練設定條件。動力因子有助于其反饋的誤差信號使神經元權值重新振蕩起來,一定程度上避免算法局部收斂,整體仍然發散,就結束訓練結束學習過程。
參考文檔
總結
以上是生活随笔為你收集整理的BP神经网络实用性操作(四步模板)和主要网络参数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: essay 浅谈ACM盲区(下)
- 下一篇: 如何使用Reviewboard进行代码R