BP網(wǎng)絡(luò)學(xué)習(xí)4部曲_第1頁(yè)
BP網(wǎng)絡(luò)學(xué)習(xí)4部曲_第2頁(yè)
BP網(wǎng)絡(luò)學(xué)習(xí)4部曲_第3頁(yè)
BP網(wǎng)絡(luò)學(xué)習(xí)4部曲_第4頁(yè)
BP網(wǎng)絡(luò)學(xué)習(xí)4部曲_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、學(xué)習(xí)內(nèi)容總結(jié)成4個(gè)小節(jié),具體內(nèi)容如下:第一節(jié)內(nèi)容:包括神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識(shí),BP網(wǎng)絡(luò)的特點(diǎn),bp主要應(yīng)用的場(chǎng)合,使用時(shí)應(yīng)注意的問(wèn)題。第二節(jié)內(nèi)容:主要是闡述BP中幾個(gè)容易混淆的概念和問(wèn)題,包括什么是網(wǎng)絡(luò)的泛化能力?過(guò)擬合是什么,怎么處理?學(xué)習(xí)速率有什么作用?神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值分別是個(gè)什么概念?用BP逼近非線(xiàn)性函數(shù),如何提高訓(xùn)練精度?第三節(jié)內(nèi)容:主要闡述使用matlab實(shí)現(xiàn),為了充分利用數(shù)據(jù),得到最優(yōu)的網(wǎng)絡(luò)訓(xùn)練結(jié)果,在網(wǎng)絡(luò)建立前,應(yīng)該進(jìn)行的基本數(shù)據(jù)處理問(wèn)題,包括:BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)的基本步驟,數(shù)據(jù)歸一化問(wèn)題和方法,輸入訓(xùn)練數(shù)據(jù)的順序排法,以及分類(lèi)方法,如何查看和保存訓(xùn)練的結(jié)果,每次結(jié)果不

2、一樣問(wèn)題。第四節(jié)內(nèi)容:bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab例子及源代碼,bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab程序的優(yōu)化(主要是根據(jù)設(shè)置誤差要求,尋找最優(yōu)網(wǎng)絡(luò)過(guò)程)什么是神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)是由很多神經(jīng)元組成的,首先我們看一下,什么是神經(jīng)元上面這個(gè)圖表示的就是一個(gè)神經(jīng)元,不管其它書(shū)上說(shuō)的那些什么樹(shù)突,軸突的。用個(gè)比較粗淺的解釋?zhuān)赡懿惶婵茖W(xué),但對(duì)初學(xué)者很容易理解:1、我們把輸入信號(hào)看成你在matlab中需要輸入的數(shù)據(jù),輸進(jìn)去神經(jīng)網(wǎng)絡(luò)后2、這些數(shù)據(jù)的每一個(gè)都會(huì)被乘上一個(gè)數(shù),即權(quán)值w,然后這些東東相加后得到u,3、上面只是線(xiàn)性變化,為了達(dá)到能處理非線(xiàn)性的目的,u做了個(gè)變換,變換的規(guī)則和傳輸函數(shù)

3、有關(guān) 可能還有人問(wèn),那么那個(gè)閥值是什么呢?簡(jiǎn)單理解就是讓這些數(shù)據(jù)做了個(gè)平移,這就是神經(jīng)元工作的過(guò)程。處理后的結(jié)果又作為輸入,可輸給別的神經(jīng)元,很多這樣的神經(jīng)元,就組成了網(wǎng)絡(luò)。在matlab中具體用什么算法實(shí)現(xiàn)這些,我們先不管,我們需要注意的是怎么使用。比如使用BP的神經(jīng)網(wǎng)絡(luò)newff()構(gòu)建一個(gè)網(wǎng)絡(luò),這些在后面的學(xué)習(xí)將提到。BP網(wǎng)絡(luò)的特點(diǎn)網(wǎng)絡(luò)實(shí)質(zhì)上實(shí)現(xiàn)了一個(gè)從輸入到輸出的映射功能,而數(shù)學(xué)理論已證明它具有實(shí)現(xiàn)任何復(fù)雜非線(xiàn)性映射的功能。這使得它特別適合于求解內(nèi)部機(jī)制復(fù)雜的問(wèn)題。無(wú)需建立模型,或了解其內(nèi)部過(guò)程,只需輸入,獲得輸出。只要BPNN結(jié)構(gòu)優(yōu)秀,一般20個(gè)輸入函數(shù)以下的問(wèn)題都能在50000次的

4、學(xué)習(xí)以?xún)?nèi)收斂到最低誤差附近。而且理論上,一個(gè)三層的神經(jīng)網(wǎng)絡(luò),能夠以任意精度逼近給定的函數(shù),這是非常誘人的期望;網(wǎng)絡(luò)能通過(guò)學(xué)習(xí)帶正確答案的實(shí)例集自動(dòng)提取“合理的”求解規(guī)則,即具有自學(xué)習(xí)能力;網(wǎng)絡(luò)具有一定的推廣、概括能力。bp主要應(yīng)用回歸預(yù)測(cè)(可以進(jìn)行擬合,數(shù)據(jù)處理分析,事物預(yù)測(cè),控制等)分類(lèi)識(shí)別(進(jìn)行類(lèi)型劃分,模式識(shí)別等),在后面的學(xué)習(xí)中,將給出實(shí)例程序。但無(wú)論那種網(wǎng)絡(luò),什么方法,解決問(wèn)題的精確度都無(wú)法打到100%的,但并不影響其使用,因?yàn)楝F(xiàn)實(shí)中很多復(fù)雜的問(wèn)題,精確的解釋是毫無(wú)意義的,有意義的解析必定會(huì)損失精度。BP注意問(wèn)題1、BP算法的學(xué)習(xí)速度很慢,其原因主要有:a 由于BP算法本質(zhì)上為梯度下

5、降法,而它所要優(yōu)化的目標(biāo)函數(shù)又非常復(fù)雜,因此,必然會(huì)出現(xiàn)“鋸齒形現(xiàn)象”,這使得BP算法低效;b 存在麻痹現(xiàn)象,由于優(yōu)化的目標(biāo)函數(shù)很復(fù)雜,它必然會(huì)在神經(jīng)元輸出接近0或1的情況下,出現(xiàn)一些平坦區(qū),在這些區(qū)域內(nèi),權(quán)值誤差改變很小,使訓(xùn)練過(guò)程幾乎停頓;c 為了使網(wǎng)絡(luò)執(zhí)行BP算法,不能用傳統(tǒng)的一維搜索法求每次迭代的步長(zhǎng),而必須把步長(zhǎng)的更新規(guī)則預(yù)先賦予網(wǎng)絡(luò),這種方法將引起算法低效。2、網(wǎng)絡(luò)訓(xùn)練失敗的可能性較大,其原因有:a 從數(shù)學(xué)角度看,BP算法為一種局部搜索的優(yōu)化方法,但它要解決的問(wèn)題為求解復(fù)雜非線(xiàn)性函數(shù)的全局極值,因此,算法很有可能陷入局部極值,使訓(xùn)練失敗;b 網(wǎng)絡(luò)的逼近、推廣能力同學(xué)習(xí)樣本的典型性密

6、切相關(guān),而從問(wèn)題中選取典型樣本實(shí)例組成訓(xùn)練集是一個(gè)很困難的問(wèn)題。3、網(wǎng)絡(luò)結(jié)構(gòu)的選擇:尚無(wú)一種統(tǒng)一而完整的理論指導(dǎo),一般只能由經(jīng)驗(yàn)選定。為此,有人稱(chēng)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)選擇為一種藝術(shù)。而網(wǎng)絡(luò)的結(jié)構(gòu)直接影響網(wǎng)絡(luò)的逼近能力及推廣性質(zhì)。因此,應(yīng)用中如何選擇合適的網(wǎng)絡(luò)結(jié)構(gòu)是一個(gè)重要的問(wèn)題。4、新加入的樣本要影響已學(xué)習(xí)成功的網(wǎng)絡(luò),而且刻畫(huà)每個(gè)輸入樣本的特征數(shù)目也必須相同。5、采用s型激活函數(shù),由于輸出層各神經(jīng)元的理想輸出值只能接近于1或0,而不能打到1或0,因此設(shè)置各訓(xùn)練樣本的期望輸出分量Tkp時(shí),不能設(shè)置為1或0,設(shè)置0.9或0.1較為適宜。 第二節(jié) 本節(jié)主要學(xué)習(xí)BP中幾個(gè)容易混淆的概念和問(wèn)題:什么是網(wǎng)絡(luò)的泛

7、化能力?過(guò)擬合是什么,怎么處理?學(xué)習(xí)速率有什么作用?神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值分別是個(gè)什么概念?用BP逼近非線(xiàn)性函數(shù),如何提高訓(xùn)練精度?什么是網(wǎng)絡(luò)的泛化能力? 一個(gè)神經(jīng)網(wǎng)路是否優(yōu)良,與傳統(tǒng)最小二乘之類(lèi)的擬合評(píng)價(jià)不同(主要依據(jù)殘差,擬合優(yōu)度等),不是體現(xiàn)在其對(duì)已有的數(shù)據(jù)擬合能力上,而是對(duì)后來(lái)的預(yù)測(cè)能力,既泛化能力。 網(wǎng)絡(luò)的預(yù)測(cè)能力(也稱(chēng)泛化能力、推廣能力)與訓(xùn)練能力(也稱(chēng)逼近能力、學(xué)習(xí)能力)的矛盾。一般情況下,訓(xùn)練能力差時(shí),預(yù)測(cè)能力也差,并且一定程度上,隨訓(xùn)練能力地提高,預(yù)測(cè)能力也提高。但這種趨勢(shì)有一個(gè)極限,當(dāng)達(dá)到此極限時(shí),隨著訓(xùn)練能力的提高,預(yù)測(cè)能力反而下降,即出現(xiàn)所謂“過(guò)擬合”現(xiàn)象。此時(shí),網(wǎng)絡(luò)學(xué)習(xí)

8、了過(guò)多的樣本細(xì)節(jié),而不能反映樣本內(nèi)含的規(guī)律。過(guò)擬合是什么,怎么處理? 神經(jīng)網(wǎng)絡(luò)計(jì)算不能一味地追求訓(xùn)練誤差最小,這樣很容易出現(xiàn)“過(guò)擬合”現(xiàn)象,只要能夠?qū)崟r(shí)檢測(cè)誤差率的變化就可以確定最佳的訓(xùn)練次數(shù),比如15000次左右的學(xué)習(xí)次數(shù),如果你不觀(guān)察,設(shè)成500000次學(xué)習(xí),不僅需要很長(zhǎng)時(shí)間來(lái)跑,而且最后結(jié)果肯定令人大失所望。避免過(guò)擬合的一種方法是:在數(shù)據(jù)輸入中,把訓(xùn)練的數(shù)據(jù)分類(lèi),分為正常訓(xùn)練用、變量數(shù)據(jù)、測(cè)試數(shù)據(jù),在后面節(jié)將講到如何進(jìn)行這種分類(lèi)。其中變量數(shù)據(jù),在網(wǎng)絡(luò)訓(xùn)練中,起到的作用就是防止過(guò)擬合狀態(tài)。學(xué)習(xí)速率有什么作用? 學(xué)習(xí)速率這個(gè)參數(shù)可以控制能量函數(shù)的步幅,并且如果設(shè)為自動(dòng)調(diào)整的話(huà),可以在誤差率經(jīng)

9、過(guò)快速下降后,將學(xué)習(xí)速率變慢,從而增加BPNN的穩(wěn)定性。此時(shí)訓(xùn)練方法采用 net.trainFcn = 'traingda' % 變學(xué)習(xí)率梯度下降算法net.trainFcn = 'traingdx' % 變學(xué)習(xí)率動(dòng)量梯度下降算法可以定義一個(gè)變動(dòng)的學(xué)習(xí)速率,如 p = -1 -1 2 2; 0 5 0 5;t = -1 -1 1 1;net = newff(p,t,3,'traingda');net.trainParam.lr = 0.05;net.trainParam.lr_inc = 1.05;net = train(net,p,t);y =

10、 sim(net,p)在后面的擬合例題中,將用到學(xué)習(xí)速率這個(gè)參數(shù)。神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值分別是個(gè)什么概念?第一節(jié)中,已經(jīng)談到了權(quán)值和閥值的概念。這里更深入的說(shuō)明一下,因?yàn)樗麄兒苤匾P(guān)系到網(wǎng)絡(luò)最后的結(jié)果。權(quán)值和閾值是神經(jīng)元之間的連接,將數(shù)據(jù)輸入計(jì)算出一個(gè)輸出,然后與實(shí)際輸出比較,誤差反傳,不斷調(diào)整權(quán)值和閾值。假如下面兩個(gè)點(diǎn)屬于不同的類(lèi),設(shè)計(jì)分類(lèi)器將他們分開(kāi)p1=1 1 -1'p2=1 -1 -1'這里用單層神經(jīng)元感知器,假設(shè)初始權(quán)值 w=0.2 0.2 0.3同時(shí)假設(shè)初始閥值 b=-0.3輸出 a1 a2 a1=hardlims(w*p1+b)a2=hardlims(w*p2+b

11、)如果不能分開(kāi),還須不斷調(diào)整w,b用BP逼近非線(xiàn)性函數(shù),如何提高訓(xùn)練精度(1)調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)增加網(wǎng)絡(luò)的層數(shù)可以進(jìn)一步降低誤差,提高精度但會(huì)使網(wǎng)絡(luò)復(fù)雜化,從而增加網(wǎng)絡(luò)的訓(xùn)練時(shí)間。精度的提高實(shí)際上也可以通過(guò)增加隱層神經(jīng)元的數(shù)目來(lái)獲得,其效果更容易觀(guān)察和掌握,所以應(yīng)優(yōu)先考慮。(2)初始值選取為了使誤差盡可能小 ,需要合理選擇初始權(quán)重和閾值,如果太大就容易陷入飽和區(qū),導(dǎo)致停頓 。一般應(yīng)選為均勻分布的小數(shù),介于 (-1,1) 。(3)學(xué)習(xí)速率調(diào)整學(xué)習(xí)速率的選取很重要 ,大了可能導(dǎo)致系統(tǒng)不穩(wěn)定,小了會(huì)導(dǎo)致訓(xùn)練周期過(guò)長(zhǎng)、收斂慢,達(dá)不到要求的誤差。一般傾向于選取較小的學(xué)習(xí)速率以保持系統(tǒng)穩(wěn)定,通過(guò)觀(guān)察誤差下降曲線(xiàn)

12、來(lái)判斷。下降較快說(shuō)明學(xué)習(xí)率比較合適,若有較大振蕩則說(shuō)明學(xué)習(xí)率偏大。同時(shí),由于網(wǎng)絡(luò)規(guī)模大小的不同,學(xué)習(xí)率選擇應(yīng)當(dāng)針對(duì)其進(jìn)行調(diào)整。采用變學(xué)習(xí)速率的方案,令學(xué)習(xí)速率隨學(xué)習(xí)進(jìn)展而逐步減少,可收到良好的效果。(4)期望誤差期望誤差當(dāng)然希望越小越好,但是也要有合適值。 第三節(jié) 本節(jié)主要學(xué)習(xí)使用matlab實(shí)現(xiàn)bp算法的一般步驟和過(guò)程。為了充分利用數(shù)據(jù),得到最優(yōu)的網(wǎng)絡(luò)訓(xùn)練結(jié)果,在網(wǎng)絡(luò)建立前應(yīng)該進(jìn)行的基本數(shù)據(jù)處理問(wèn)題,包括:(1)BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)的基本步驟(2)數(shù)據(jù)歸一化問(wèn)題和方法(3)輸入訓(xùn)練數(shù)據(jù)的亂序排法,以及分類(lèi)方法(4)如何查看和保存訓(xùn)練的結(jié)果(5)每次結(jié)果不一樣問(wèn)題。用matlab實(shí)現(xiàn)b

13、p,其實(shí)很簡(jiǎn)單,按下面步驟基本可以了BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)的基本步驟1、數(shù)據(jù)歸一化2、數(shù)據(jù)分類(lèi),主要包括打亂數(shù)據(jù)順序,抽取正常訓(xùn)練用數(shù)據(jù)、變量數(shù)據(jù)、測(cè)試數(shù)據(jù)3、建立神經(jīng)網(wǎng)絡(luò),包括設(shè)置多少層網(wǎng)絡(luò)(一般3層以?xún)?nèi)既可以,每層的節(jié)點(diǎn)數(shù)(具體節(jié)點(diǎn)數(shù),尚無(wú)科學(xué)的模型和公式方法確定,可采用試湊法,但輸出層的節(jié)點(diǎn)數(shù)應(yīng)和需要輸出的量個(gè)數(shù)相等),設(shè)置隱含層的傳輸函數(shù)等。關(guān)于網(wǎng)絡(luò)具體建立使用方法,在后幾節(jié)的例子中將會(huì)說(shuō)到。4、指定訓(xùn)練參數(shù)進(jìn)行訓(xùn)練,這步非常重要,在例子中,將詳細(xì)進(jìn)行說(shuō)明5、完成訓(xùn)練后,就可以調(diào)用訓(xùn)練結(jié)果,輸入測(cè)試數(shù)據(jù),進(jìn)行測(cè)試6、數(shù)據(jù)進(jìn)行反歸一化7、誤差分析、結(jié)果預(yù)測(cè)或分類(lèi),作圖等數(shù)據(jù)歸一化問(wèn)

14、題歸一化的意義:首先說(shuō)一下,在工程應(yīng)用領(lǐng)域中,應(yīng)用BP網(wǎng)絡(luò)的好壞最關(guān)鍵的仍然是輸入特征選擇和訓(xùn)練樣本集的準(zhǔn)備,若樣本集代表性差、矛盾樣本多、數(shù)據(jù)歸一化存在問(wèn)題,那么,使用多復(fù)雜的綜合算法、多精致的網(wǎng)絡(luò)結(jié)構(gòu),建立起來(lái)的模型預(yù)測(cè)效果不會(huì)多好。若想取得實(shí)際有價(jià)值的應(yīng)用效果,從最基礎(chǔ)的數(shù)據(jù)整理工作做起吧,會(huì)少走彎路的。歸一化是為了加快訓(xùn)練網(wǎng)絡(luò)的收斂性,具體做法是:1 把數(shù)變?yōu)椋?,1)之間的小數(shù)主要是為了數(shù)據(jù)處理方便提出來(lái)的,把數(shù)據(jù)映射到01范圍之內(nèi)處理,更加便捷快速,應(yīng)該歸到數(shù)字信號(hào)處理范疇之內(nèi)。2 把有量綱表達(dá)式變?yōu)闊o(wú)量綱表達(dá)式歸一化是一種簡(jiǎn)化計(jì)算的方式,即將有量綱的表達(dá)式,經(jīng)過(guò)變換,化為無(wú)量綱的

15、表達(dá)式,成為純量比如,復(fù)數(shù)阻抗可以歸一化書(shū)寫(xiě):Z = R + jL = R(1 + jL/R) ,復(fù)數(shù)部分變成了純數(shù)量了,沒(méi)有量綱。另外,微波之中也就是電路分析、信號(hào)系統(tǒng)、電磁波傳輸?shù)?,有很多運(yùn)算都可以如此處理,既保證了運(yùn)算的便捷,又能凸現(xiàn)出物理量的本質(zhì)含義。神經(jīng)網(wǎng)絡(luò)歸一化方法:由于采集的各數(shù)據(jù)單位不一致,因而須對(duì)數(shù)據(jù)進(jìn)行-1,1歸一化處理,歸一化方法主要有如下幾種,供大家參考:1、線(xiàn)性函數(shù)轉(zhuǎn)換,表達(dá)式如下: y=(x-MinValue)/(MaxValue-MinValue)說(shuō)明:x、y分別為轉(zhuǎn)換前、后的值,MaxValue、MinValue分別為樣本的最大值和最小值。2、對(duì)數(shù)函數(shù)轉(zhuǎn)換,表達(dá)

16、式如下: y=log10(x)說(shuō)明:以10為底的對(duì)數(shù)函數(shù)轉(zhuǎn)換。3、反余切函數(shù)轉(zhuǎn)換,表達(dá)式如下: y=atan(x)*2/PImatlab中歸一化的實(shí)現(xiàn):matlab中的歸一化處理有以下幾種方法,只會(huì)其中一種就可以了。注意:第一組和第二組歸一化函數(shù)在Matlab7.0以上已遺棄,他們的用法相似,pre*是歸一化,post*是反歸一化,tram*是使用同樣的設(shè)置歸一化另外一組數(shù)據(jù)1. 內(nèi)部函數(shù)premnmx、postmnmx、tramnmx,將數(shù)據(jù)歸一化到(-1,1)premnmx的語(yǔ)法格式是 Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T)其中P,T分別為原始輸入和輸

17、出數(shù)據(jù),minp和maxp分別為P中的最小值和最大值。mint和maxt分別為T(mén)的最小值和最大值。在訓(xùn)練網(wǎng)絡(luò)時(shí),如果所用的是經(jīng)過(guò)歸一化的樣本數(shù)據(jù),那么以后使用網(wǎng)絡(luò)時(shí)所用的新數(shù)據(jù)也應(yīng)該和樣本數(shù)據(jù)接受相同的預(yù)處理,這就要用到tramnmx,換句話(huà)說(shuō)使用同一個(gè)歸一化設(shè)置(setting)歸一化另外一組數(shù)據(jù)。如下所示: Pn=tramnmx(P,minp,maxp)其中P和Pn分別為變換前、后的輸入數(shù)據(jù),maxp和minp分別為premnmx函返回的最大值maxp和最小值minp。2、prestd、poststd、trastd歸化數(shù)據(jù)到(0,1)用法與1差不多。詳細(xì)可以help prestd。上述兩種

18、方法是可以相互轉(zhuǎn)化的,比如,第一種歸化后的數(shù)據(jù)為p,則(1+p)./2的結(jié)果就是第二種了3、mapminmax()將數(shù)據(jù)歸一化到(-1,1),是6.5中*mnmx系列的替換函數(shù)該函數(shù)同時(shí)可以執(zhí)行歸一化、反歸一化和歸一化其他數(shù)據(jù)的功能,具體看幫助和后面的實(shí)例 % 歸一化數(shù)據(jù)輸入為p,輸出為tnormInput,ps = mapminmax(p);normTarget,ts = mapminmax(t);% 反歸一化trainOutput = mapminmax('reverse',normTrainOutput,ts);trainInsect = mapminmax('r

19、everse',trainSamples.T,ts);validateOutput = mapminmax('reverse',normValidateOutput,ts);validateInsect = mapminmax('reverse',validateSamples.T,ts);testOutput = mapminmax('reverse',normTestOutput,ts);testInsect = mapminmax('reverse',testSamples.T,ts);%例子:x1 = 1 2 4;

20、 1 1 1; 3 2 2; 0 0 0y1,PS = mapminmax(x1,0,1)% 歸化到 0,1,若不填,則默認(rèn)為-1,1%還原:x1_again = mapminmax('reverse',y1,PS)4、mapstd()將數(shù)據(jù)歸一化到(0,1),是6.5中*std系列的替代函數(shù)3和4兩種方法是可以相互轉(zhuǎn)化的,比如,第一種歸化后的數(shù)據(jù)為p,則(1+p)./2的結(jié)果就是第二種了。把數(shù)據(jù)重新打亂順序,進(jìn)行輸入,可以讓數(shù)據(jù)更加具備典型性和更優(yōu)良的泛化能力!把數(shù)據(jù)進(jìn)行打亂,并分類(lèi)為:訓(xùn)練輸入數(shù)據(jù)、變量數(shù)據(jù)、測(cè)試數(shù)據(jù)的方法如何查看和保存結(jié)果訓(xùn)練好的權(quán)值、閾值的輸出方法是:輸

21、入到隱層權(quán)值: w1=net.iw1,1隱層閾值: theta1=net.b1隱層到輸出層權(quán)值: w2=net.lw2,1;輸出層閾值: theta2=net.b2訓(xùn)練好的BP神經(jīng)網(wǎng)絡(luò)保存: save file_name net_name %Matlab自動(dòng)將網(wǎng)絡(luò)保存為mat數(shù)據(jù)文件,下次使用時(shí)可以直接載入load file_name每次結(jié)果不一樣問(wèn)題因?yàn)槊看纬跏蓟W(wǎng)絡(luò)時(shí)都是隨機(jī)的,而且訓(xùn)練終止時(shí)的誤差也不完全相同,結(jié)果訓(xùn)練后的權(quán)植和閥也不完全相同(大致是一樣的),所以每次訓(xùn)練后的結(jié)果也略有不同。找到比較好的結(jié)果后,用命令save filen_ame net_name保存網(wǎng)絡(luò),可使預(yù)測(cè)的結(jié)果不

22、會(huì)變化,在需要的調(diào)用時(shí)用命令load filename載入。第四節(jié) 根據(jù)前面三節(jié)的學(xué)習(xí)內(nèi)容,可以基本編寫(xiě)一個(gè)BP神經(jīng)網(wǎng)絡(luò),來(lái)處理一些問(wèn)題了。下面給出一個(gè)bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab源代碼,里面?zhèn)溆休^為詳細(xì)的注釋?zhuān)?%bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab源代碼% BP 神經(jīng)網(wǎng)絡(luò)用于預(yù)測(cè)% 使用平臺(tái) - Matlab7.10.0(R2010a)% 數(shù)據(jù)為1986年到2000年的交通量 ,網(wǎng)絡(luò)為3輸入,1輸出% 15組數(shù)據(jù),其中9組為正常訓(xùn)練數(shù)據(jù),3組為變量數(shù)據(jù),3組為測(cè)試數(shù)據(jù)clcclear%原始數(shù)據(jù)year=1986:2000;%數(shù)據(jù)是從1986到2000年的p=493 372 44

23、5;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; 668 841 526;841 526 480;526 480 567;480 567 685'%輸入數(shù)據(jù),共15組,每組3個(gè)輸入t=176 235 378 429 561 651 467 527 668 841 526 480 567 685 507;%輸出數(shù)據(jù),共15組,每組1個(gè)輸出%數(shù)據(jù)歸一化處理%mapminmax函數(shù)默認(rèn)將數(shù)據(jù)

24、歸一化到-1,1,調(diào)用形式如下%y,ps =%mapminmax(x,ymin,ymax)%x需歸化的數(shù)據(jù)輸入%ymin,ymax為需歸化到的范圍,不填默認(rèn)為歸化到-1,1%y歸一化后的樣本數(shù)據(jù)%ps處理設(shè)置,ps主要在結(jié)果反歸一化中需要調(diào)用,或者使用同樣的settings歸一化另外一組數(shù)據(jù)%-normInput,ps = mapminmax(p);normTarget,ts = mapminmax(t);%-%數(shù)據(jù)亂序,及分類(lèi)處理%將輸入的15組數(shù)據(jù)的20%,即3組,用來(lái)作為測(cè)試數(shù)據(jù);% 樣本的20%,即3組,用來(lái)作為變化數(shù)據(jù);%另外9組用來(lái)正常輸入,用來(lái)訓(xùn)練;%dividevec()用來(lái)重

25、新隨機(jī)抽取上述三種分類(lèi)的數(shù)據(jù),原來(lái)的順序被打亂%函數(shù)調(diào)用的語(yǔ)法%trainV,valV,testV = dividevec(p,t,valPercent,testPercent)%輸入p為輸入數(shù)據(jù),t為輸出數(shù)據(jù)%valPercent為訓(xùn)練用的變化數(shù)據(jù)在總輸入中的百分比%testPercent為訓(xùn)練用的測(cè)試數(shù)據(jù)在總輸入中的百分比%輸出trainV,valV,testV分別為按亂序及相應(yīng)百分比,抽取得到的數(shù)據(jù)%另外,打亂后的數(shù)據(jù),p和t都是對(duì)應(yīng)的,請(qǐng)放心使用%-testPercent = 0.20; % Adjust as desiredvalidatePercent = 0.20; % Adus

26、t as desiredtrainSamples,validateSamples,testSamples = dividevec(normInput,normTarget,validatePercent,testPercent);%-% 設(shè)置網(wǎng)絡(luò)參數(shù)NodeNum1 = 20; % 隱層第一層節(jié)點(diǎn)數(shù)NodeNum2=40; % 隱層第二層節(jié)點(diǎn)數(shù)TypeNum = 1; % 輸出維數(shù)TF1 = 'tansig'TF2 = 'tansig' TF3 = 'tansig'%各層傳輸函數(shù),TF3為輸出層傳輸函數(shù)%如果訓(xùn)練結(jié)果不理想,可以嘗試更改傳輸函數(shù),

27、以下這些是各類(lèi)傳輸函數(shù)%TF1 = 'tansig'TF2 = 'logsig'%TF1 = 'logsig'TF2 = 'purelin'%TF1 = 'tansig'TF2 = 'tansig'%TF1 = 'logsig'TF2 = 'logsig'%TF1 = 'purelin'TF2 = 'purelin' %注意創(chuàng)建BP網(wǎng)絡(luò)函數(shù)newff()的參數(shù)調(diào)用,在新版本(7.6)中已改變net=newff(minmax(normIn

28、put),NodeNum1,NodeNum2,TypeNum,TF1 TF2 TF3,'traingdx');%創(chuàng)建四層BP網(wǎng)絡(luò)%-% 設(shè)置訓(xùn)練參數(shù)net.trainParam.epochs=10000;%訓(xùn)練次數(shù)設(shè)置net.trainParam.goal=1e-6;%訓(xùn)練目標(biāo)設(shè)置net.trainParam.lr=0.01;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會(huì)在開(kāi)始加快收斂速度,但臨近最佳點(diǎn)時(shí),會(huì)產(chǎn)生動(dòng)蕩,而致使無(wú)法收斂%-% 指定訓(xùn)練函數(shù)% net.trainFcn = 'traingd' % 梯度下降算法% net.trainFcn = 'tr

29、aingdm' % 動(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

30、-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大% net.trainFcn = 'traincgb' % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大% (大型網(wǎng)絡(luò)的首選算法)%net.trainFcn = 'trainscg' % Scaled Conjugate Gradient算法,內(nèi)存需求與Fletcher-Reeves修正算法相同,計(jì)算量比上面三種算法都小很多% net.trainFcn = 'trainbfg' % Quasi-Newton Algorithms -

31、BFGS Algorithm,計(jì)算量和內(nèi)存需求均比共軛梯度算法大,但收斂比較快% net.trainFcn = 'trainoss' % One Step Secant Algorithm,計(jì)算量和內(nèi)存需求均比BFGS算法小,比共軛梯度算法略大% (中型網(wǎng)絡(luò)的首選算法)%net.trainFcn = 'trainlm' % Levenberg-Marquardt算法,內(nèi)存需求最大,收斂速度最快% net.trainFcn = 'trainbr' % 貝葉斯正則化算法% 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm'net.trainfcn='traingdm'net,tr = train(net,trainSamples.P,trainSamples.T,validateSamples,testSamples);%-% 訓(xùn)練完成后,就可以調(diào)用sim()函數(shù),進(jìn)行仿真了%- normTrainOutput,Pf,Af,E,trainPerf = sim(net,trainSamples.P,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論