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