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