




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、考拉BP神經網絡的 matlab實現學習歷程(一)考拉BP神經網絡的 matlab實現學習歷程(一)本文考拉BP神經網絡的matlab實現學習歷程 系列由論壇超級版主akjuan整理和原 創(chuàng),我們在此表示特別感謝這兩天在學習bp,總結和匯報一下,和大家一起學習。希望初入神經網絡能有所收獲,給新手一些幫組和啟發(fā)。也希望熟悉bp的高手,多提寶貴意見和建議。學習內容總結成五個小節(jié),具體內容如下:第一節(jié)內容:包括神經網絡的基礎知識,BP網絡的特點,bp主要應用的場合,使用時應注 意的問題。第二節(jié)內容:主要是闡述BP中幾個容易混繞的概念和問題,包括什么是網絡的泛化能力?過擬合是什么,怎么處理?學習速率有
2、什么作用?神經網絡的權值和閾值分別是個什么概 念?用BP逼近非線性函數,如何提高訓練精度?第三節(jié)內容:主要闡述使用 matlab實現,為了充分利用數據,得到最優(yōu)的網絡訓練結果,在網絡建立前,應該進行的基本數據處理問題,包括:BP神經網絡matlab實現的基本步驟,數據歸一化問題和方法,輸入訓練數據的亂序排法,以及分類方法,如何查看和保存訓練的結果,每次結果不一樣問題。第四節(jié)內容:bp神經網絡進行交通預測的 Matlab例子及源代碼,bp神經網絡進行交通預 測的Matlab程序的優(yōu)化(主要是按設置誤差要求,尋找最優(yōu)網絡過程)第五節(jié)內容:bp神經網絡處理螺蟲分類問題的matlab例子及源代碼。不多
3、說,先如主題,第一節(jié),很基礎,高手見諒。什么是神經網絡?神經網絡是由很多神經元組成的,首先我們看一下,什么是神經元上面這個圖表示的就是一個神經元,我們不管其它書上說的那些什么樹突,軸突的。我用個比較粗淺的解釋,可能不太全面科學,但對初學者很容易理解:1、我們把輸入信號看成你在matlab中需要輸入的數據,輸進去神經網絡后2、這些數據的每一個都會被乘個數,即權值w,然后這些東東與閥值 b相加后求和得到u,3、上面只是線性變化,為了達到能處理非線性的目的,u做了個變換,變換的規(guī)則和傳輸函數有關可能還有人問,那么那個閥值是什么呢?簡單理解就是讓這些數據做了個平移,這就是神經元工作的過程。處理后的結果
4、又作為輸入,可輸給別的神經元,很多這樣的神經元,就組成了網絡。在matlab中具體用什么算法實現這些,我們先不管,我們需要注意的是怎么使用 。比如使用BP的神經網絡newf()構建一個網絡,這些在后面的學習將提到。BP網絡的特點網絡實質上實現了一個從輸入到輸出的映射功能,而數學理論已證明它具有實現任何復雜非線性映射的功能。這使得它特別適合于求解內部機制復雜的問題。我們無需建立模型,或了解其內部過程,只需輸入,獲得輸出。只要 BPNN結構優(yōu)秀,一般20個輸入函數以下的 問題都能在50000次的學習以內收斂到最低誤差附近。而且理論上,一個三層的神經網絡, 能夠以任意精度逼近給定的函數,這是非常誘人
5、的期望; 網絡能通過學習帶正確答案的實例集自動提取合理的”求解規(guī)則,即具有自學習能力;網絡具有一定的推廣、概括能力。bp主要應用回歸預測(可以進行擬合,數據處理分析,事物預測,控制等)、分類識別(進行類型劃分,模式識別等),在后面的學習中,我都將給出實例程序。但無論那種網絡,什么方法,解決問題的精確度都無法打到100%的,但并不影響其使用,因為現實中很多復雜的問題,精確的解釋是毫無意義的,有意義的解析必定會損失精度。BP注意問題1、BP算法的學習速度很慢,其原因主要有:a由于BP算法本質上為梯度下降法,而它所要優(yōu)化的目標函數又非常復雜,因此,必然會 出現鋸齒形現象:這使得BP算法低效;b存在麻
6、痹現象,由于優(yōu)化的目標函數很復雜,它必然會在神經元輸出接近0或1的情況下,出現一些平坦區(qū),在這些區(qū)域內,權值誤差改變很小,使訓練過程幾乎停頓;c為了使網絡執(zhí)行 BP算法,不能用傳統(tǒng)的一維搜索法求每次迭代的步長,而必須把步長的更新規(guī)則預先賦予網絡,這種方法將引起算法低效。2、網絡訓練失敗的可能性較大,其原因有:a從數學角度看,BP算法為一種局部搜索的優(yōu)化方法,但它要解決的問題為求解復雜非線 性函數的全局極值,因此,算法很有可能陷入局部極值,使訓練失?。籦網絡的逼近、推廣能力同學習樣本的典型性密切相關,而從問題中選取典型樣本實例組 成訓練集是一個很困難的問題。3、網絡結構的選擇:尚無一種統(tǒng)一而完整
7、的理論指導, 一般只能由經驗選定。 為此,有人稱神經網絡的結構選擇 為一種藝術。而網絡的結構直接影響網絡的逼近能力及推廣性質。因此,應用中如何選擇合 適的網絡結構是一個重要的問題。4、新加入的樣本要影響已學習成功的網絡,而且刻畫每個輸入樣本的特征的數目也必須相 同。5、采用s型激活函數,由于輸出層各神經元的理想輸出值只能接近于1或0,而不能打到1或0,因此設置各訓練樣本的期望輸出分量 Tkp時,不能設置為1或0,設置0.9或0.1 較為適宜??祭瑽P神經網絡的matlab實現學習歷程(二)本文考拉BP神經網絡的matlab實現學習歷程 系列由論壇超級版主akjuan整理和原 創(chuàng),我們在此表示特
8、別感謝本節(jié)主要學習BP中幾個容易混繞的概念和問題:什么是網絡的泛化能力?過擬合是什么, 怎么處理?學習速率有什么作用?神經網絡的權值和閾值分別是個什么概念?用BP逼近非線性函數,如何提高訓練精度?什么是網絡的泛化能力?一個神經網路是否優(yōu)良,與傳統(tǒng)最小二乘之類的擬合評價不同(主要依據殘差,擬合優(yōu)度等),不是體現在其對已有的數據擬合能力上,而是對后來的預測能力,既泛化能力。網絡的預測能力(也稱泛化能力、推廣能力)與訓練能力(也稱逼近能力、學習能力)的矛 盾。一般情況下,訓練能力差時,預測能力也差,并且一定程度上,隨訓練能力地提高,預 測能力也提高。但這種趨勢有一個極限,當達到此極限時,隨訓練能力的
9、提高,預測能力反而下降,即出現所謂 過擬合”現象。此時,網絡學習了過多的樣本細節(jié),而不能反映樣本內 含的規(guī)律。過擬合是什么,怎么處理?神經網絡計算不能一味地追求訓練誤差最小,這樣很容易出現過擬合'現象,只要能夠實時檢測誤差率的變化就可以確定最佳的訓練次數,比如15000次左右的學習次數,如果你不觀察,設成500000次學習,不僅需要很長時間來跑,而且最后結果肯定令人大失所望。避免過擬合的一種方法是:在數據輸入中,給訓練的數據分類,分為正常訓練用、變量數據、測試數據,在后面節(jié)將講到如何進行這種分類。其中變量數據,在網絡訓練中,起到的作用就是防止過擬合狀態(tài)。學習速率有什么作用?學習速率這個
10、參數可以控制能量函數的步幅,并且如果設為自動調整的話,可以在誤差率經過快速下降后,將學習速率變慢,從而增加BPNN的穩(wěn)定性。此時訓練方法采用復制內容到剪貼板代碼:DE>net.trainFcn = 'traingda' %變學習率梯度下降算法net.trainFcn = 'traingdx' %變學習率動量梯度下降算法DE>可以定義一個變動的學習速率,如復制內容到剪貼板代碼:DE>p = -1-1 2 2; 0 5 0 5;t = -1-1 1 1;net = newff(p,t,3,'traingda');net.trainP
11、aram.lr = 0.05;net.trainParam.lr_inc = 1.05;net = train(net,p,t); y = sim(net,p)DE> 在后面的擬合例題中,我們也將用到學習速率這個參數。神經網絡的權值和閾值分別是個什么概念?第一節(jié)中,我們已經談到了權值和閥值的概念。這里我們更深入的說明一下,因為他們很重要,關系到網絡最后的結果。權值和閾值是神經元之間的連接,將數據輸入計算出一個輸出,然后與實際輸出比較,誤差反傳,不斷調整權值和閾值。假如下面兩個點屬于不同的類,須設計分類器將他們分開引用:p1=1 1-1'p2=1 -1 -1'這里用單層神經
12、元感知器,假設初始權值復制內容到剪貼板代碼:DE>w=0.2 0.2 0.3DE>同時假設初始閥值復制內容到剪貼板代碼:DE>b=-0.3DE>輸出al a2復制內容到剪貼板 代碼:DE>a1=hardlims(w*p1+b)a2=hardlims(w*p2+b)DE>如果不能分開,還須不斷調整w,b用BP逼近非線性函數,如何提高訓練精度(1)調整網絡結構增加網絡的層數可以進一步降低誤差, 提高精度但會使網絡復雜化, 從而增加網絡的訓練時 間。精度的提高實際上也可以通過增加隱層神經元的數目來獲得,其效果更容易觀察和掌握,所以應優(yōu)先考慮。(2)初始值選取為了使
13、誤差盡可能小 ,需要合理選擇初始權重和偏置,如果太大就容易陷入飽和區(qū),導致 停頓。一般應選為均勻分布的小數,介于 (-1 , 1)。(3)學習速率調整學習速率的選取很重要 ,大了可能導致系統(tǒng)不穩(wěn)定,小了會導致訓練周期過長、收斂慢, 達不到要求的誤差。 一般傾向于選取較小的學習速率以保持系統(tǒng)穩(wěn)定,通過觀察誤差下降曲線來判斷。下降較快說明學習率比較合適,若有較大振蕩則說明學習率偏大。同時,由于網絡規(guī)模大小的不同, 學習率選擇應當針對其進行調整。采用變學習速率的方案,令學習速率隨學習進展而逐步減少,可收到良好的效果。(4)期望誤差期望誤差當然希望越小越好,但是也要有合適值??祭瑽P神經網絡的matl
14、ab實現學習歷程(三)本文考拉BP神經網絡的matlab實現學習歷程 系列由論壇超級版主akjuan整理和原 創(chuàng),我們在此表示特別感謝本節(jié)主要學習使用 matlab實現bp算法的一般步驟和過程。為了充分利用數據,得到最優(yōu)的網絡訓練結果,在網絡建立前應該進行的基本數據處理問題,包括:(1)BP神經網絡matlab實現的基本步驟(2)數據歸一化問題和方法(3)輸入訓練數據的亂序排法,以及分類方法(4)如何查看和保存訓練的結果(5)每次結果不一樣問題。用matlab實現bp,其實很簡單,按下面步驟基本可以了BP神經網絡matlab實現的基本步驟1、數據歸一化2、數據分類,主要包括打亂數據順序,抽取正
15、常訓練用數據、變量數據、測試數據3、建立神經網絡,包括設置多少層網絡(一般3層以內既可以,每層的節(jié)點數(具體節(jié)點數,尚無科學的模型和公式方法確定 ,可采用試湊法,但輸出層的節(jié)點數應和需要輸出的量 個數相等),設置隱含層的傳輸函數等。關于網絡具體建立使用方法,在后幾節(jié)的例子中將會說到。4、指定訓練參數進行訓練,這步非常重要,在例子中,將詳細進行說明5、完成訓練后,就可以調用訓練結果,輸入測試數據,進行測試6、數據進行反歸一化7、誤差分析、結果預測或分類,作圖等數據歸一化問題歸一化的意義:首先說一下,在工程應用領域中, 應用BP網絡的好壞最關鍵的仍然是輸入特征選擇和訓練 樣本集的準備,若樣本集代表
16、性差、矛盾樣本多、數據歸一化存在問題,那么,使用多復雜 的綜合算法、多精致的網絡結構, 建立起來的模型預測效果不會多好。若想取得實際有價值的應用效果,從最基礎的數據整理工作做起吧,會少走彎路的。歸一化是為了加快訓練網絡的收斂性,具體做法是:1把數變?yōu)椋?,1)之間的小數主要是為了數據處理方便提出來的,把數據映射到01范圍之內處理,更加便捷快速,應該歸到數字信號處理范疇之內。2把有量綱表達式變?yōu)闊o量綱表達式歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量比如,復數阻抗可以歸一化書寫:Z = R + j coL = R(1 + j co L/R)復數部分變成了
17、純數量了,沒有量綱。另外,微波之中也就是電路分析、信號系統(tǒng)、電磁波傳輸等,有很多運算都可以 如此處理,既保證了運算的便捷,又能凸現出物理量的本質含義。神經網絡歸一化方法:由于采集的各數據單位不一致,因而須對數據進行-1,1歸一化處理,歸一化方法主要有如下幾種,供大家參考:1、線性函數轉換,表達式如下:復制內容到剪貼板代碼:DE>y=(x-MinValue)/(MaxValue-MinValue)DE>說明:x、y分別為轉換前、后的值, MaxValue、MinValue分別為樣本的最大值和最小值。2、對數函數轉換,表達式如下:復制內容到剪貼板代碼:DE>y=log10(x)D
18、E>說明:以10為底的對數函數轉換。3、反余切函數轉換,表達式如下:復制內容到剪貼板代碼:DE>y=atan(x)*2/PIDE>matlab中歸一化的實現:matlab中的歸一化處理有五種方法,只會其中一種就可以了,我喜歡用第4種,因為習慣和方便注意:第一組和第二組歸一化函數在Matlab7.0以上已遺棄,他們的用法相似,pre*是歸一化,post*是反歸一化,tram*是使用同樣的設置歸一化另外一組數據1.內部函數 premnmx、postmnmx、tramnmx ,將數據歸一化到 (-1,1) premnmx 的語法格式是復制內容到剪貼板代碼:DE> : Pn,m
19、inp,maxp,Tn,mint,maxt=premnmx(P,T)DE>其中P , T分別為原始輸入和輸出數據,minp和maxp分別為P中的最小值和最大值。mint和maxt分別為T的最小值和最大值。我們在訓練網絡時,如果所用的是經過歸一化的樣本數據,那么以后使用網絡時所用的新數據也應該和樣本數據接受相同的預處理,這就要用到tramnmx ,換句話說使用同一個歸一化設置(setting)歸一化另外一組數據。如下所示:復制內容到剪貼板代碼:DE>Pn=tramnmx(P,minp,maxp)DE>其中P和Pn分別為變換前、后的輸入數據,maxp和minp分別為premnmx
20、函返回的最大 值maxp和最小值minp。2、prestd、poststd、trastd 歸化數據到(0,1)用法與1差不多。詳細可以help prestd 。上述兩種方法是可以相互轉化的,比如,第一種歸化后的數據為p,則(1+p)./2的結果就是第二種了3、mapminmax()將數據歸一化到(-1,1),是6.5中*mnmx系列的替換函數該函數同時可以執(zhí)行歸一化、反歸一化和歸一化其他數據的功能,具體看幫助和后面的實例復制內容到剪貼板代碼:DE>%歸一化數據輸入為p,輸出為tnormInput,ps = mapminmax(p);normTarget,ts = mapminmax(t)
21、;%反歸一化trainOutput = mapminmax('reverse',normTrainOutput,ts);trainInsect = mapminmax('reverse',trainSamples.T,ts);validateOutput = mapminmax('reverse',normValidateOutput,ts);validateInsect = mapminmax('reverse',validateSamples.T,ts);testOutput = mapminmax('reverse&
22、#39;,normTestOutput,ts);testInsect = mapminmax('reverse',testSamples.T,ts);%例子:x1 = 1 2 4; 1 1 1; 3 2 2; 0 0 0y1,PS = mapminmax(x1,0,1)% 歸化到0,1,若不填,則默認為 -1,1%還原:x1_again = mapminmax('reverse',y1,PS)DE>4、mapstd()將數據歸一化到(0,1),是6.5中*std系列的替代函數同理,3和4兩種方法是可以相互轉化的,比如,第一種歸化后的數據為p,則(1+p).
23、/2的結果就是第二種了。5、自己寫歸一化函數,這個網上很多,大家可以百度下輸入訓練數據的亂序排法,以及分類注意:dividevec()函數在7.6版本還可以使用把數據重新打亂順序,進行輸入,可以讓數據更加具備典型性和更優(yōu)良的泛化能力!把數據進行打亂,并分類為:訓練輸入數據、變量數據、測試數據的方法我用百度搜了一下,發(fā)現有些方法,但居然很少看到使用matlab內部函數直接進行的,其實matlab自帶的內部函數 dividevec ,完全能勝任上述工作,推薦 !但這個存在一個問題是,因為打亂了,最后分析結果的時候,數據重新排列困難,因為丟失了數據在數組中的位置參數。具體用法可以參見下面我的bp交通
24、預測的例子。因為我用的 7.0 版本,Neural Network Toolbox Version 5.0.2(R2007a)昨天,我去mathworks公司查看了一下 nnet的新手冊,上述問題得到了解決,里面視乎沒 有介紹dividverc這個函數了,但增加了新的函數來完成上述功能,并返回標號(手頭沒裝 新版本 Neural Network Toolbox Version 6.0(R2008a),看 guide 大概是這個意思(有新版本的,可以試一下,這個函數是不是這個意思):divideblock , divideind , divideint 和 dividerand上述函數,用法和功
25、能基本相同,只是打亂的方法不一樣,分別是 block方法抽取、按數組 標號自定義抽取、交錯索引抽取和隨機抽 。下面以divideblock為例,講解其基本用法:復制內容到剪貼板代碼:DE>trainV,valV,testV,trainInd,valInd,testInd =divideblock(allV,trainRatio,valRatio,testRatio)訓練數據,變量數據,測試數據,訓練數據矩陣的標號,變量數據標號,測試數據標號 =divideblock(所有數據,訓練數據百分比,變量數據百分比,測試數據百分比)DE> 其實dividevec和后面四個分類函數的區(qū)別在于
26、,dividevec 一般直接在 Matlab代碼中調用。而后面四個函數是通過設置網絡的divideFcn函數來實現,比如,net.divideFcn='divideblock',但不是說不可以在代碼中像dividevec直接調用如何查看和保存結果訓練好的權值、閾值的輸出方法是:輸入到隱層權值:復制內容到剪貼板 代碼:DE>w1=net.iw1,1DE>隱層閾值:復制內容到剪貼板 代碼:DE>theta1=net.b1DE>隱層到輸出層權值:復制內容到剪貼板代碼:DE>w2=net.lw2,1;DE>輸出層閾值:復制內容到剪貼板代碼:DE&g
27、t;theta2=net.b2DE>訓練好的BP神經網絡保存:復制內容到剪貼板代碼:DE>%保存save file_name net_name%Matlab自動將網絡保存為 mat數據文件,下次使用時可以直接載入%載入load file_nameDE>每次結果不一樣問題因為每次初始化網絡時都是隨機的,而且訓練終止時的誤差也不完全相同,結果訓練后的權植和閥也不完全相同(大致是一樣的),所以每次訓練后的結果也略有不同。找到比較好的結果后,用命令save filen_ame net_name保存網絡,可使預測的結果不會變化,在需要的調用時用命令load filename載入。關于如
28、何找到比較好的結果,進行保存,可以設置誤差,在循環(huán)中保存,具體使用可以參看bp交通預測優(yōu)化后的例子考拉BP神經網絡的matlab實現學習歷程(四)一bp神經網絡進行交通預測的Matlab源代碼本文考拉BP神經網絡的matlab實現學習歷程 系列由論壇超級版主akjuan整理和原 創(chuàng),我們在此表示特別感謝根據前面三節(jié)的學習內容,可以基本編寫一個BP神經網絡,來處理一些問題了。下面我給出一個 bp神經網絡進行交通預測的Matlab源代碼,里面?zhèn)溆休^為詳細的注釋,供給初學者!復制內容到剪貼板代碼:DE>%bp神經網絡進行交通預測的Matlab源代碼% BP神經網絡用于預測%使用平臺 -Matl
29、ab7.0%數據為1986年到2000年的交通量,網絡為3輸入,1輸出% 15組數據,其中9組為正常訓練數據,3組為變量數據,3組為測試數據%by akjuan%all rights preserved by %2008.11clcclear%原始數據%year=1986:2000;% 數據是從 1986 到 2000 年的p=493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;527 668 841; 66
30、8 841 526;841 526 480;526 480 567;480 567 685'%輸入數據,共 15 組,每組3個輸入t=176 235 378 429 561 651 467 527 668 841 526 480 567 685 507;%輸出數據,共 15組,每組1個輸出%數據歸一化處理%mapminmax函數默認將數據歸一化到-1,1,調用形式如下%y,ps =%mapminmax(x,ymin,ymax)%x需歸化的數據輸入%ymin , ymax為需歸化到的范圍,不填默認為歸化到-1,1%y歸一化后的樣本數據settings歸一化另外%ps處理設置,ps主要在結
31、果反歸一化中需要調用,或者使用同樣的 一組數據%normInput,ps = mapminmax(p);normTarget,ts = mapminmax(t);%數據亂序,及分類處理%將輸入的15組數據的20%,即3組,用來作為測試數據;%樣本的20%,即3組,用來作為變化數據;%另外9組用來正常輸入,用來訓練;%dividevec()用來重新隨機抽取上述三種分類的數據,原來的順序被打亂 %函數調用的語法%trainV,valV,testV = dividevec(p,t,valPercent,testPercent)%輸入p為輸入數據,t為輸出數據%valPercent為訓練用的變化數據在
32、總輸入中的百分比 %testPercent為訓練用的測試數據在總輸入中的百分比 %輸出trainV,valV,testV 分別為按亂序及相應百分比,抽取得到的數據 %另外,打亂后的數據,p和t都是對應的,請放心使用 %testPercent = 0.20;% Adjust as desiredvalidatePercent = 0.20;% Adust as desiredtrainSamples,validateSamples,testSamples= dividevec(normInput,normTarget,validatePercent,testPercent);%設置網絡參數%No
33、deNum1 = 20; %隱層第一層節(jié)點數NodeNum2=40; %隱層第二層節(jié)點數TypeNum = 1; %輸出維數TF1 = 'tansig'TF2 = 'tansig' TF3 = 'tansig'%各層傳輸函數,TF3 為輸出層傳輸函數%如果訓練結果不理想,可以嘗試更改傳輸函數,以下這些是各類傳輸函數%TF1 = 'tansig'TF2 = 'logsig'%TF1 = 'logsig'TF2 = 'purelin'%TF1 = 'tansig'TF2
34、= 'tansig'%TF1 = 'logsig'TF2 = 'logsig'%TF1 = 'purelin'TF2 = 'purelin'%注意創(chuàng)建BP網絡函數newf()的參數調用,在新版本(7.6)中已改變net=newf(minmax(normInput),NodeNum1,NodeNum2,TypeNum,TF1 TF2TF3,'traingdx');% 創(chuàng)建四層 BP 網絡%設置訓練參數% net.trainParam.epochs=10000;% 訓練次數設置net.trainPara
35、m.goal=1e-6;% 訓練目標設置net.trainParam.lr=0.01;%學習率設置,應設置為較少值,太大雖然會在開始加快收斂速度但臨近最佳點時,會產生動蕩,而致使無法收斂%指定訓練函數% net.trainFcn = 'traingd' % net.trainFcn = 'traingdm' % % net.trainFcn = 'traingda' % % net.trainFcn = 'traingdx' % % (大型網絡的首選算法)梯度下降算法動量梯度下降算法變學習率梯度下降算法變學習率動量梯度下降算法%
36、net.trainFcn = 'trainrp' % RPROP( 彈性 BP)算法,內存需求最小% (共軻梯度算法)% net.trainFcn = 'traincgf; % Fletcher-Reeves修正算法% net.trainFcn = 'traincgp' % Polak-Ribiere 修正算法,內存需求比 Fletcher-Reeves 修正算 法略大% net.trainFcn = 'traincgb' % Powell-Beal復位算法,內存需求比 Polak-Ribiere 修正算法略大 % (大型網絡的首選算法)
37、%net.trainFcn = 'trainscg' % Scaled Conjugate Gradient 算法,內存需求與Fletcher-Reeves修正算法相同,計算量比上面三種算法都小很多% net.trainFcn = 'trainbfg' % Quasi-Newton Algorithms - BFGS Algorithm,計算量和內存需求均比共軻梯度算法大,但收斂比較快% net.trainFcn = 'trainoss' % One Step Secant Algorithm,計算量和內存需求均比BFGS 算法小,比共軻梯度算法
38、略大% (中型網絡的首選算法)%net.trainFcn = 'trainlm' % Levenberg-Marquardt 算法,內存需求最大,收斂速度最快% net.trainFcn = 'trainbr' %貝葉斯正則化算法% 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm' net.trainfcn='traingdm'net,tr = train(net,trainSamples
39、.P,trainSamples.T,validateSamples,testSamples);%訓練完成后,就可以調用 sim()函數,進行仿真了%normTrainOutput,Pf,Af,E,trainPerf = sim(net,trainSamples.P,trainSamples.T);%正常輸入的9組p數據,BP得到的結果tnormValidateOutput,Pf,Af,E,validatePerf=sim(net,validateSamples.P,validateSamples.T);%用作變量 3 的數據 p,BP 得到的結果tnormTestOutput,Pf,Af,E,
40、testPerf = sim(net,testSamples.P,testSamples.T);%用作測試白3 3組數據p, BP得到的結果t%仿真后結果數據反歸一化,如果需要預測,只需將預測的數據P填入%將獲得預測結果t%trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常輸入的 9 組 p 數據,BP 得到的歸一化后的結果ttraininsect = mapminmax('reverse',trainSamples.T,ts);%正常輸入的 9 組數據 tvalidateOutput = mapm
41、inmax('reverse',normValidateOutput,ts);% 用作變量 3 的數據 p, BP 得到的歸一化的結果tvalidatelnsect = mapminmax('reverse',validateSamples.T,ts);%用作變量 3 的數據 ttestOutput = mapminmax('reverse',normTestOutput,ts);% 用作變量 3 組數據 p, BP 得到的 歸一化的結果ttestinsect = mapminmax('reverse',testSamples.T
42、,ts);%用作變量 3 組數據 t%數據分析和繪圖%figureplot(1:12,trainOutput validateOutput,'b-',1:12,traininsectvalidateinsect,'g-',13:15,testOutput,'m*',13:15,testinsect,'ro');title('o為真實值,*為預測值)xlabel('年份');ylabel('交通量(輛次/晝夜)');DE>運行后的結果如下圖,注意該程序是在7.0版本上實驗的,沒法在6.5
43、版本運行,因為6.5版本的歸一化函數被遺棄了;在7.6以上版本沒有沒法運行,因為newff函數參數形式改變了。但是只要將上面提到部分相應修改下,就可以運行了正常數據,是用來正常訓練用變量數據,主要目的是防止訓練中出現過擬合狀態(tài)測試數據,是用來看訓練效果的為省實值為他瀏憎100品llltM.- 加亨卜考拉BP神經網絡的matlab實現學習歷程(五)一bp神經網絡進行交通預測程序優(yōu)化本文考拉BP神經網絡的matlab實現學習歷程 系列由論壇超級版主akjuan整理和原 創(chuàng),我們在此表示特別感謝在第四節(jié),給出的 BP網絡進行交通預測的程序,是個基本模式,更改少數幾處參數后,可 用于其它方面!但通過程
44、序運行后,可以看出,預測效果并不理想,如何得到理想的預測訓練結果,下面是基本思路及matlab的實現:1、設置一個誤差項,為測試數據的網絡仿真結果和實際結果偏差,并設置一個自己能接受 的精度值2、每次訓練網絡后,將這個誤差和設置值比較,也可通過測試獲得網絡能給出的最高預測 精度3、得到滿意訓練網絡后,保存BP結果,以便下次調用下面這個程序是在第四節(jié)程序基礎上優(yōu)化而來,可以運行前面的程序和這個程序,比較兩者的差別,可以通過修改 eps來控制預測的誤差! 復制內容到剪貼板代碼:DE>%bp神經網絡進行交通預測的 Matlab源代碼% BP神經網絡用于預測%使用平臺 -Matlab7.0%數據
45、為1986年到2000年的交通量,網絡為3輸入,1輸出% 15組數據,其中9組為正常訓練數據,3組為變量數據,3組為測試數據%by akjuan%all rights preserved by %2008.11 clcclearAll_error=;%所有誤差存儲%原始數據%year=1986:2000;% 數據是從 1986 到 2000 年的輸入數據,共15組,輸出數據,共15settings歸一化另外p=493 372 445;372 445 176;445 176 235;176 235 378;235 378 429; 378 429 561;429 561 651;561 651
46、467;651 467 527;467 527 668; 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685'% 每組3個輸入t=176 235 378 429 561 651 467 527 668 841 526 480 567 685 507;% 組,每組1個輸出%數據歸一化處理%mapminmax函數默認將數據歸一化到-1,1,調用形式如下%y,ps =%mapminmax(x,ymin,ymax)%x需歸化的數據輸入%ymin , ymax為需歸化到的范圍,不填默認為歸化到-1,1%y歸一化后的樣本數據%p
47、s處理設置,ps主要在結果反歸一化中需要調用,或者使用同樣的 一組數據%normInput,ps = mapminmax(p);normTarget,ts = mapminmax(t);%數據亂序,及分類處理%將輸入的15組數據的20%,即3組,用來作為測試數據;%樣本的20%,即3組,用來作為變化數據;%另外9組用來正常輸入,用來訓練;%dividevec()用來重新隨機抽取上述三種分類的數據,原來的順序被打亂%函數調用的語法%trainV,valV,testV = dividevec(p,t,valPercent,testPercent)%輸入p為輸入數據,t為輸出數據%valPercen
48、t為訓練用的變化數據在總輸入中的百分比%testPercent為訓練用的測試數據在總輸入中的百分比%輸出trainV,valV,testV 分別為按亂序及相應百分比,抽取得到的數據%另外,打亂后的數據,p和t都是對應的,請放心使用%testPercent = 0.20;% Adjust as desiredvalidatePercent = 0.20;% Adust as desiredtrainSamples,validateSamples,testSamples= dividevec(normInput,normTarget,validatePercent,testPercent);for
49、 j=1:200%設置網絡參數%NodeNum1 = 20; %隱層第一層節(jié)點數NodeNum2=40; %隱層第二層節(jié)點數TypeNum = 1; %輸出維數TF1 = 'tansig'TF2 = 'tansig' TF3 = 'tansig'%各層傳輸函數,TF3 為輸出層傳輸函數%如果訓練結果不理想,可以嘗試更改傳輸函數,以下這些是各類傳輸函數 %TF1 = 'tansig'TF2 = 'logsig'%TF1 = 'logsig'TF2 = 'purelin'%TF1 = &
50、#39;tansig'TF2 = 'tansig'%TF1 = 'logsig'TF2 = 'logsig'%TF1 = 'purelin'TF2 = 'purelin'net=newff(minmax(normInput),NodeNum1,NodeNum2,TypeNum,TF1 TF2TF3,'traingdx');% 網絡創(chuàng)建%設置訓練參數%net.trainParam.epochs=10000;% 訓練次數設置net.trainParam.goal=1e-6;% 訓練目標設置net
51、.trainParam.lr=0.01;%學習率設置,應設置為較少值,太大雖然會在開始加快收斂速度但臨近最佳點時,會產生動蕩,而致使無法收斂%指定訓練參數% net.trainFcn = 'traingd' % net.trainFcn = 'traingdm' % % net.trainFcn = 'traingda' % net.trainFcn = 'traingdx' % (大型網絡的首選算法)% net.trainFcn = 'trainrp' % RPROP( 彈性 % (共軻梯度算法)% net.tr
52、ainFcn = 'traincgf; % Fletcher-Reeves% net.trainFcn = 'traincgp' % Polak-Ribiere 法略大% net.trainFcn = 'traincgb' % Powell-Beal 大% (大型網絡的首選算法)梯度下降算法動量梯度下降算法變學習率梯度下降算法變學習率動量梯度下降算法BP)算法,內存需求最小修正算法修正算法,內存需求比Fletcher-Reeves 修正算復位算法,內存需求比Polak-Ribiere修正算法略%net.trainFcn = 'trainscg
53、39; % Scaled Conjugate Gradient 算法,內存需求與Fletcher-Reeves修正算法相同,計算量比上面三種算法都小很多% net.trainFcn = 'trainbfg' % Quasi-Newton Algorithms - BFGS Algorithm,計算量和內存需求均比共軻梯度算法大,但收斂比較快% net.trainFcn = 'trainoss' % One Step Secant Algorithm,計算量和內存需求均比BFGS 算法小,比共軻梯度算法略大% (中型網絡的首選算法)%net.trainFcn =
54、'trainlm' % Levenberg-Marquardt 算法,內存需求最大,收斂速度最快% net.trainFcn = 'trainbr' %貝葉斯正則化算法% 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm' net.trainfcn='traingdm'net,tr = train(net,trainSamples.P,trainSamples.T,validateSamples,testS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肢體離斷應急處理
- 請求帳篷報告范文
- 欠費報告范文
- 二零二五年度未婚父母放棄撫養(yǎng)權及子女撫養(yǎng)費支付協議
- 2025年度車輛報廢回收抵押借款合同
- 二零二五年度夫妻離婚協議書及財產分割及子女撫養(yǎng)權及撫養(yǎng)金及贍養(yǎng)費及債務處理及子女教育及共同財產及子女撫養(yǎng)協議書
- 2025年度旅游酒店委托經營管理協議
- 2025年度汽車行業(yè)信息化建設與系統(tǒng)集成服務合同模板
- 二零二五年度魚塘承包與漁業(yè)生態(tài)補償協議
- 二零二五年度醫(yī)藥行業(yè)員工競業(yè)禁止補償金及解約合同
- 修建水壩施工合同模板
- 劍橋商務英語中級unit12
- 北師大版三年級下冊除法豎式計算題練習100道及答案
- 十堰2024年湖北十堰市茅箭區(qū)教育局所屬學校招聘教師134人筆試歷年典型考題及考點附答案解析
- 小白兔拔蘿卜(無背景音樂)
- 人音版六年級下冊音樂教案及反思
- 北琪射頻控溫熱凝器(李健洪)
- 四年級上冊豎式計算100題及答案
- 結構化在崗帶教手冊模板2.0
- 管道支吊架安裝工程標準圖冊直接參考使用
- 建筑施工新進員工三級安全教育培訓課件
評論
0/150
提交評論