導航:首頁 > 編程大全 > bp神經網路動量因子程序

bp神經網路動量因子程序

發布時間:2023-03-30 17:43:21

1. BP神經網路原理

人工神經網路有很多模型,但是日前應用最廣、基本思想最直觀、最容易被理解的是多層前饋神經網路及誤差逆傳播學習演算法(Error Back-Prooaeation),簡稱為BP網路。

在1986年以Rumelhart和McCelland為首的科學家出版的《Parallel Distributed Processing》一書中,完整地提出了誤差逆傳播學習演算法,並被廣泛接受。多層感知網路是一種具有三層或三層以上的階層型神經網路。典型的多層感知網路是三層、前饋的階層網路(圖4.1),即:輸入層、隱含層(也稱中間層)、輸出層,具體如下:

圖4.1 三層BP網路結構

(1)輸入層

輸入層是網路與外部交互的介面。一般輸入層只是輸入矢量的存儲層,它並不對輸入矢量作任何加工和處理。輸入層的神經元數目可以根據需要求解的問題和數據表示的方式來確定。一般而言,如果輸入矢量為圖像,則輸入層的神經元數目可以為圖像的像素數,也可以是經過處理後的圖像特徵數。

(2)隱含層

1989年,Robert Hecht Nielsno證明了對於任何在閉區間內的一個連續函數都可以用一個隱層的BP網路來逼近,因而一個三層的BP網路可以完成任意的n維到m維的映射。增加隱含層數雖然可以更進一步的降低誤差、提高精度,但是也使網路復雜化,從而增加了網路權值的訓練時間。誤差精度的提高也可以通過增加隱含層中的神經元數目來實現,其訓練效果也比增加隱含層數更容易觀察和調整,所以一般情況應優先考慮增加隱含層的神經元個數,再根據具體情況選擇合適的隱含層數。

(3)輸出層

輸出層輸出網路訓練的結果矢量,輸出矢量的維數應根據具體的應用要求來設計,在設計時,應盡可能減少系統的規模,使系統的復雜性減少。如果網路用作識別器,則識別的類別神經元接近1,而其它神經元輸出接近0。

以上三層網路的相鄰層之間的各神經元實現全連接,即下一層的每一個神經元與上一層的每個神經元都實現全連接,而且每層各神經元之間無連接,連接強度構成網路的權值矩陣W。

BP網路是以一種有教師示教的方式進行學習的。首先由教師對每一種輸入模式設定一個期望輸出值。然後對網路輸入實際的學習記憶模式,並由輸入層經中間層向輸出層傳播(稱為「模式順傳播」)。實際輸出與期望輸出的差即是誤差。按照誤差平方最小這一規則,由輸出層往中間層逐層修正連接權值,此過程稱為「誤差逆傳播」(陳正昌,2005)。所以誤差逆傳播神經網路也簡稱BP(Back Propagation)網。隨著「模式順傳播」和「誤差逆傳播」過程的交替反復進行。網路的實際輸出逐漸向各自所對應的期望輸出逼近,網路對輸入模式的響應的正確率也不斷上升。通過此學習過程,確定下各層間的連接權值後。典型三層BP神經網路學習及程序運行過程如下(標志淵,2006):

(1)首先,對各符號的形式及意義進行說明:

網路輸入向量Pk=(a1,a2,...,an);

網路目標向量Tk=(y1,y2,...,yn);

中間層單元輸入向量Sk=(s1,s2,...,sp),輸出向量Bk=(b1,b2,...,bp);

輸出層單元輸入向量Lk=(l1,l2,...,lq),輸出向量Ck=(c1,c2,...,cq);

輸入層至中間層的連接權wij,i=1,2,...,n,j=1,2,...p;

中間層至輸出層的連接權vjt,j=1,2,...,p,t=1,2,...,p;

中間層各單元的輸出閾值θj,j=1,2,...,p;

輸出層各單元的輸出閾值γj,j=1,2,...,p;

參數k=1,2,...,m。

(2)初始化。給每個連接權值wij、vjt、閾值θj與γj賦予區間(-1,1)內的隨機值。

(3)隨機選取一組輸入和目標樣本

提供給網路。

(4)用輸入樣本

、連接權wij和閾值θj計算中間層各單元的輸入sj,然後用sj通過傳遞函數計算中間層各單元的輸出bj

基坑降水工程的環境效應與評價方法

bj=f(sj) j=1,2,...,p (4.5)

(5)利用中間層的輸出bj、連接權vjt和閾值γt計算輸出層各單元的輸出Lt,然後通過傳遞函數計算輸出層各單元的響應Ct

基坑降水工程的環境效應與評價方法

Ct=f(Lt) t=1,2,...,q (4.7)

(6)利用網路目標向量

,網路的實際輸出Ct,計算輸出層的各單元一般化誤差

基坑降水工程的環境效應與評價方法

(7)利用連接權vjt、輸出層的一般化誤差dt和中間層的輸出bj計算中間層各單元的一般化誤差

基坑降水工程的環境效應與評價方法

(8)利用輸出層各單元的一般化誤差

與中間層各單元的輸出bj來修正連接權vjt和閾值γt

基坑降水工程的環境效應與評價方法

(9)利用中間層各單元的一般化誤差

,輸入層各單元的輸入Pk=(a1,a2,...,an)來修正連接權wij和閾值θj

基坑降水工程的環境效應與評價方法

(10)隨機選取下一個學習樣本向量提供給網路,返回到步驟(3),直到m個訓練樣本訓練完畢。

(11)重新從m個學習樣本中隨機選取一組輸入和目標樣本,返回步驟(3),直到網路全局誤差E小於預先設定的一個極小值,即網路收斂。如果學習次數大於預先設定的值,網路就無法收斂。

(12)學習結束。

可以看出,在以上學習步驟中,(8)、(9)步為網路誤差的「逆傳播過程」,(10)、(11)步則用於完成訓練和收斂過程。

通常,經過訓練的網路還應該進行性能測試。測試的方法就是選擇測試樣本向量,將其提供給網路,檢驗網路對其分類的正確性。測試樣本向量中應該包含今後網路應用過程中可能遇到的主要典型模式(宋大奇,2006)。這些樣本可以直接測取得到,也可以通過模擬得到,在樣本數據較少或者較難得到時,也可以通過對學習樣本加上適當的雜訊或按照一定規則插值得到。為了更好地驗證網路的泛化能力,一個良好的測試樣本集中不應該包含和學習樣本完全相同的模式(董軍,2007)。

2. BP神經演算法是什麼能給點既通俗易懂又比較詳細的回答嗎

BP(Back Propagation)網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。

BP神經網路演算法是在BP神經網路現有演算法的基礎上提出的,是通過任意選定一組權值,將給定的目標輸出直接作為線性方程的代數和來建立線性方程組,解得待求權,不存在傳統方法的局部極小及收斂速度慢的問題,且更易理解。
1 傳統的BP演算法簡述
BP演算法是一種有監督式的學習演算法,其主要思想是:輸入學習樣本,使用反向傳播演算法對網路的權值和偏差進行反復的調整訓練,使輸出的向量與期望向量盡可能地接近,當網路輸出層的誤差平方和小於指定的誤差時訓練完成,保存網路的權值和偏差。具體步驟如下: (1)初始化,隨機給定各連接權[w],[v]及閥值θi,rt。 (2)由給定的輸入輸出模式對計算隱層、輸出層各單元輸出 bj=f(■wijai-θj) ct=f(■vjtbj-rt) 式中:bj為隱層第j個神經元實際輸出;ct為輸出層第t個神經元的實際輸出;wij為輸入層至隱層的連接權;vjt為隱層至輸出層的連接權。 dtk=(ytk-ct)ct(1-ct) ejk=[■dtvjt] bj(1-bj) 式中:dtk為輸出層的校正誤差;ejk為隱層的校正誤差。 (3)計算新的連接權及閥值,計算公式如下: vjt(n+1)=vjt(n)+?琢dtkbj wij(n+1)=wij(n)+?茁ejkaik rt(n+1)=rt(n)+?琢dtk θj(n+1)=θj(n)+?茁ejk 式中:?琢,?茁為學習系數(0<?琢<1,0<?茁<1)。 (4)選取下一個輸入模式對返回第2步反復訓練直到網路設輸出誤差達到要求結束訓練。 傳統的BP演算法,實質上是把一組樣本輸入/輸出問題轉化為一個非線性優化問題,並通過負梯度下降演算法,利用迭代運算求解權值問題的一種學習方法,但其收斂速度慢且容易陷入局部極小,為此提出了一種新的演算法,即高斯消元法。
2 改進的BP網路演算法
2.1 改進演算法概述 此前有人提出:任意選定一組自由權,通過對傳遞函數建立線性方程組,解得待求權。本文在此基礎上將給定的目標輸出直接作為線性方程等式代數和來建立線性方程組,不再通過對傳遞函數求逆來計算神經元的凈輸出,簡化了運算步驟。沒有採用誤差反饋原理,因此用此法訓練出來的神經網路結果與傳統演算法是等效的。其基本思想是:由所給的輸入、輸出模式對通過作用於神經網路來建立線性方程組,運用高斯消元法解線性方程組來求得未知權值,而未採用傳統BP網路的非線性函數誤差反饋尋優的思想。 2.2 改進演算法的具體步驟 對給定的樣本模式對,隨機選定一組自由權,作為輸出層和隱含層之間固定權值,通過傳遞函數計算隱層的實際輸出,再將輸出層與隱層間的權值作為待求量,直接將目標輸出作為等式的右邊建立方程組來求解。 現定義如下符號(見圖1):x (p)輸入層的輸入矢量;y (p)輸入層輸入為x (p)時輸出層的實際輸出矢量;t (p)目標輸出矢量;n,m,r分別為輸入層、隱層和輸出層神經元個數;W為隱層與輸入層間的權矩陣;V為輸出層與隱層間的權矩陣。具體步驟如下: (1)隨機給定隱層和輸入層間神經元的初始權值wij。 (2)由給定的樣本輸入xi(p)計算出隱層的實際輸出aj(p)。為方便起見將圖1網路中的閥值寫入連接權中去,令:隱層閥值θj=wnj,x(n)=-1,則: aj(p)=f(■wijxi(p)) (j=1,2…m-1)。 (3)計算輸出層與隱層間的權值vjr。以輸出層的第r個神經元為對象,由給定的輸出目標值tr(p)作為等式的多項式值建立方程,用線性方程組表示為: a0(1)v1r+a1(1)v2r+…+am(1)vmr=tr(1)a0(2)v1r+a1(2)v2r+…+am(2)vmr=tr(2) ……a0(p)v1r+a1(p)v2r+…+am(p)vmr=tr(p) 簡寫為: Av=T 為了使該方程組有唯一解,方程矩陣A為非奇異矩陣,其秩等於其增廣矩陣的秩,即:r(A)=r(A┊B),且方程的個數等於未知數的個數,故取m=p,此時方程組的唯一解為: Vr=[v0r,v2r,…vmr](r=0,1,2…m-1) (4)重復第三步就可以求出輸出層m個神經元的權值,以求的輸出層的權矩陣加上隨機固定的隱層與輸入層的權值就等於神經網路最後訓練的權矩陣。
3 計算機運算實例
現以神經網路最簡單的XOR問題用VC編程運算進行比較(取神經網路結構為2-4-1型),傳統演算法和改進BP演算法的誤差(取動量因子α=0.001 5,步長η=1.653)

3. 關於BP神經網路出現的問題

p和t後面加個『!你的p和t維數不對,這樣輸入不對了!

4. matlab BP神經網路訓練程序求解釋

樓主解決沒?這是我知道的

[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %歸一化數據,方便後面的預測

net.trainParam. show = 100; %這里的show是顯示步數,每100步顯示一次
net.trainParam.goal=0.0001; %目標誤差,訓練得到的數據和原始輸入
net.trainParam.lr = 0.01; %lr是學習動量,一般越小越好
y1=sim(net,pn); %sim用來預測的

xlswrite('testdata6',tnew1); ?這里的testdata6是excel表格的名稱

你可以看看書的,書上都有介紹

5. 傷寒、副傷寒流行預測模型(BP神經網路)的建立

由於目前研究的各種數學模型或多或少存在使用條件的局限性,或使用方法的復雜性等問題,預測效果均不十分理想,距離實際應用仍有較大差距。NNT是Matlab 中較為重要的一個工具箱,在實際應用中,BP 網路用的最廣泛。神經網路具有綜合能力強,對數據的要求不高,適時學習等突出優點,其操作簡便,節省時間,網路初學者即使不了解其演算法的本質,也可以直接應用功能豐富的函數來實現自己的目的。因此,易於被基層單位預防工作者掌握和應用。以下幾個問題是建立理想的因素與疾病之間的神經網路模型的關鍵:

(1)資料選取

應盡可能地選取所研究地區系統連續的因素與疾病資料,最好包括有疾病高發年和疾病低發年的數據。在收集影響因素時,要抓住主要影響傷寒、副傷寒的發病因素。

(2)疾病發病率分級

神經網路預測法是按發病率高低來進行預測,在定義發病率等級時,要結合專業知識及當地情況而定,並根據網路學習訓練效果而適時調整,以使網路學習訓練達到最佳效果。

(3)資料處理問題

在實踐中發現,資料的特徵往往很大程度地影響網路學習和訓練的穩定性,因此,數據的應用、納入、排出問題有待於進一步研究。

6.3.1 人工神經網路的基本原理

人工神經網路(ANN)是近年來發展起來的十分熱門的交叉學科,它涉及生物、電子、計算機、數學和物理等學科,有著廣泛的應用領域。人工神經網路是一種自適應的高度非線性動力系統,在網路計算的基礎上,經過多次重復組合,能夠完成多維空間的映射任務。神經網路通過內部連接的自組織結構,具有對數據的高度自適應能力,由計算機直接從實例中學習獲取知識,探求解決問題的方法,自動建立起復雜系統的控制規律及其認知模型。

人工神經網路就其結構而言,一般包括輸入層、隱含層和輸出層,不同的神經網路可以有不同的隱含層數,但他們都只有一層輸入和一層輸出。神經網路的各層又由不同數目的神經元組成,各層神經元數目隨解決問題的不同而有不同的神經元個數。

6.3.2 BP神經網路模型

BP網路是在1985年由PDP小組提出的反向傳播演算法的基礎上發展起來的,是一種多層次反饋型網路(圖6.17),它在輸入和輸出之間採用多層映射方式,網路按層排列,只有相鄰層的節點直接相互連接,傳遞之間信息。在正向傳播中,輸入信息從輸入層經隱含層逐層處理,並傳向輸出層,每層神經元的狀態隻影響下一層神經元的狀態。如果輸出層不能得到期望的輸出結果,則轉入反向傳播,將誤差信號沿原來的連同通路返回,通過修改各層神經元的權值,使誤差信號最小。

BP網路的學習演算法步驟如下(圖6.18):

圖6.17 BP神經網路示意圖

圖6.18 BP演算法流程圖

第一步:設置初始參數ω和θ,(ω為初始權重,θ為臨界值,均隨機設為較小的數)。

第二步:將已知的樣本加到網路上,利用下式可算出他們的輸出值yi,其值為

岩溶地區地下水與環境的特殊性研究

式中:xi為該節點的輸入;ωij為從I到j的聯接權;θj為臨界值;yj為實際算出的輸出數據。

第三步:將已知輸出數據與上面算出的輸出數據之差(dj-yj)調整權系數ω,調整量為

ΔWij=ηδjxj

式中:η為比例系數;xj為在隱節點為網路輸入,在輸出點則為下層(隱)節點的輸出(j=1,2…,n);dj為已知的輸出數據(學習樣本訓練數據);δj為一個與輸出偏差相關的值,對於輸出節點來說有

δjj(1-yj)(dj-yj

對於隱節點來說,由於它的輸出無法進行比較,所以經過反向逐層計算有

岩溶地區地下水與環境的特殊性研究

其中k指要把上層(輸出層)節點取遍。誤差δj是從輸出層反向逐層計算的。各神經元的權值調整後為

ωij(t)=ωij(t-1)+Vωij

式中:t為學習次數。

這個演算法是一個迭代過程,每一輪將各W值調整一遍,這樣一直迭代下去,知道輸出誤差小於某一允許值為止,這樣一個好的網路就訓練成功了,BP演算法從本質上講是把一組樣本的輸入輸出問題變為一個非線性優化問題,它使用了優化技術中最普遍的一種梯度下降演算法,用迭代運算求解權值相當於學習記憶問題。

6.3.3 BP 神經網路模型在傷寒、副傷寒流行與傳播預測中的應用

傷寒、副傷寒的傳播與流行同環境之間有著一定的聯系。根據桂林市1990年以來鄉鎮為單位的傷寒、副傷寒疫情資料,傷寒、副傷寒疫源地資料,結合現有資源與環境背景資料(桂林市行政區劃、土壤、氣候等)和社會經濟資料(經濟、人口、生活習慣等統計資料)建立人工神經網路數學模型,來逼近這種規律。

6.3.3.1 模型建立

(1)神經網路的BP演算法

BP網路是一種前饋型網路,由1個輸入層、若干隱含層和1個輸出層構成。如果輸入層、隱含層和輸出層的單元個數分別為n,q1,q2,m,則該三層網路網路可表示為BP(n,q1,q2,m),利用該網路可實現n維輸入向量Xn=(X1,X2,…,Xn)T到m維輸出向量Ym=(Y1,Y2,…,Ym)T的非線性映射。輸入層和輸出層的單元數n,m根據具體問題確定。

(2)樣本的選取

將模型的輸入變數設計為平均溫度、平均降雨量、岩石性質、岩溶發育、地下水類型、飲用水類型、正規自來水供應比例、集中供水比例8個輸入因子(表6.29),輸出單元為傷寒副傷寒的發病率等級,共一個輸出單元。其中q1,q2的值根據訓練結果進行選擇。

表6.29 桂林市傷寒副傷寒影響因素量化表

通過分析,選取在傷寒副傷寒有代表性的縣鎮在1994~2001年的環境參評因子作為樣本進行訓練。利用聚類分析法對疫情進行聚類分級(Ⅰ、Ⅱ、Ⅲ、Ⅳ),傷寒副傷寒發病最高級為Ⅳ(BP網路中輸出定為4),次之的為Ⅲ(BP網路中輸出定為3),以此類推,最低為Ⅰ(BP網路中輸出定為1)

(3)數據的歸一化處理

為使網路在訓練過程中易於收斂,我們對輸入數據進行了歸一化處理,並將輸入的原始數據都化為0~1之間的數。如將平均降雨量的數據乘以0.0001;將平均氣溫的數據乘以0.01;其他輸入數據也按類似的方法進行歸一化處理。

(4)模型的演算法過程

假設共有P個訓練樣本,輸入的第p個(p=1,2,…,P)訓練樣本信息首先向前傳播到隱含單元上。

經過激活函數f(u)的作用得到隱含層1的輸出信息:

岩溶地區地下水與環境的特殊性研究

經過激活函數f(u)的作用得到隱含層2的輸出信息:

岩溶地區地下水與環境的特殊性研究

激活函數f(u)我們這里採用Sigmoid型,即

f(u)=1/[1+exp(-u)](6.5)

隱含層的輸出信息傳到輸出層,可得到最終輸出結果為

岩溶地區地下水與環境的特殊性研究

以上過程為網路學習的信息正向傳播過程。

另一個過程為誤差反向傳播過程。如果網路輸出與期望輸出間存在誤差,則將誤差反向傳播,利用下式來調節網路權重和閾值:

岩溶地區地下水與環境的特殊性研究

式中:Δω(t)為t次訓練時權重和閾值的修正;η稱為學習速率,0<η<1;E為誤差平方和。

岩溶地區地下水與環境的特殊性研究

反復運用以上兩個過程,直至網路輸出與期望輸出間的誤差滿足一定的要求。

該模型演算法的缺點:

1)需要較長的訓練時間。由於一些復雜的問題,BP演算法可能要進行幾小時甚至更長的時間的訓練,這主要是由於學習速率太小造成的,可採用變化的學習速率或自適應的學習速率加以改進。

2)完全不能訓練。主要表現在網路出現的麻痹現象上,在網路的訓練過程中,當其權值調的過大,可能使得所有的或大部分神經元的加權總和n偏大,這使得激活函數的輸入工作在S型轉移函數的飽和區,從而導致其導數f′(n)非常小,從而使得對網路權值的調節過程幾乎停頓下來。

3)局部極小值。BP演算法可以使網路權值收斂到一個解,但它並不能保證所求為誤差超平面的全局最小解,很可能是一個局部極小解。這是因為BP演算法採用的是梯度下降法,訓練從某一起點沿誤差函數的斜面逐漸達到誤差的最小值。

考慮到以上演算法的缺點,對模型進行了兩方面的改進:

(1)附加動量法

為了避免陷入局部極小值,對模型進行了改進,應用了附加動量法。附加動量法在使網路修正及其權值時,不僅考慮誤差在梯度上的作用,而且考慮在誤差曲面上變化趨勢的影響,其作用如同一個低通濾波器,它允許網路忽略網路上的微小變化特性。在沒有附加動量的作用下,網路可能陷入淺的局部極小值,利用附加動量的作用則有可能滑過這些極小值。

該方法是在反向傳播法的基礎上在每一個權值的變化上加上一項正比於前次權值變化量的值,並根據反向傳播法來產生心的權值變化。促使權值的調節向著誤差曲面底部的平均方向變化,從而防止了如Δω(t)=0的出現,有助於使網路從誤差曲面的局部極小值中跳出。

這種方法主要是把式(6.7)改進為

岩溶地區地下水與環境的特殊性研究

式中:A為訓練次數;a為動量因子,一般取0.95左右。

訓練中對採用動量法的判斷條件為

岩溶地區地下水與環境的特殊性研究

(2)自適應學習速率

對於一個特定的問題,要選擇適當的學習速率不是一件容易的事情。通常是憑經驗或實驗獲取,但即使這樣,對訓練開始初期功效較好的學習速率,不見得對後來的訓練合適。所以,為了盡量縮短網路所需的訓練時間,採用了學習速率隨著訓練變化的方法來找到相對於每一時刻來說較差的學習速率。

下式給出了一種自適應學習速率的調整公式:

岩溶地區地下水與環境的特殊性研究

通過以上兩個方面的改進,訓練了一個比較理想的網路,將動量法和自適應學習速率結合起來,效果要比單獨使用要好得多。

6.3.3.2 模型的求解與預測

採用包含了2個隱含層的神經網路BP(4,q1,q2,1),隱含層單元數q1,q2與所研究的具體問題有關,目前尚無統一的確定方法,通常根據網路訓練情況採用試錯法確定。在滿足一定的精度要求下一般認小的數值,以改善網路的概括推論能力。在訓練中網路的收斂採用輸出值Ykp與實測值tp的誤差平方和進行控制:

岩溶地區地下水與環境的特殊性研究

1)將附加動量法和自適應學習速率結合應用,分析桂林市36個鄉鎮地質條件各因素對傷寒副傷寒發病等級的影響。因此訓練樣本為36個,第一個隱含層有19個神經元,第二個隱含層有11個神經元,學習速率為0.001。

A.程序(略)。

B.網路訓練。在命令窗口執行運行命令,網路開始學習和訓練,其學習和訓練過程如下(圖6.19)。

圖6.19 神經網路訓練過程圖

C.模型預測。

a.輸入未參與訓練的鄉鎮(洞井鄉、兩水鄉、延東鄉、四塘鄉、嚴關鎮、靈田鄉)地質條件數據。

b.預測。程序運行後網路輸出預測值a3,與已知的實際值進行比較,其預測結果整理後見(表6.30)。經計算,對6個鄉鎮傷寒副傷寒發病等級的預測符合率為83.3%。

表6.30 神經網路模型預測結果與實際結果比較

c.地質條件改進方案。在影響疾病發生的地質條件中,大部分地質條件是不會變化的,而改變發病地區的飲用水類型是可以人為地通過改良措施加以實施的一個因素。因此,以靈田鄉為例對發病率較高的鄉鎮進行分析,改變其飲用水類型,來看發病等級的變化情況。

表6.31顯示,在其他地質條件因素不變的情況下,改變當地的地下水類型(從原來的岩溶水類型改變成基岩裂隙水)則將發病等級從原來的最高級4級,下降為較低的2級,效果是十分明顯的。因此,今後在進行傷寒副傷寒疾病防治的時候,可以通過改變高發區飲用水類型來客觀上減少疫情的發生。

表6.31 靈田鄉改變飲用水類型前後的預測結果

2)選取桂林地區1994~2000年月平均降雨量、月平均溫度作為輸入數據矩陣,進行樣本訓練,設定不同的隱含層單元數,對各月份的數據進行BP網路訓練。在隱含層單元數q1=13,q2=9,經過46383次數的訓練,誤差達到精度要求,學習速率0.02。

A.附加動量法程序(略)。

B.網路訓練。在命令窗口執行運行命令,網路開始學習和訓練,其學習和訓練過程如下(圖6.20)。

C.模型預測。

a.輸入桂林市2001年1~12月桂林市各月份的平均氣溫和平均降雨量。預測程度(略)。

b.預測。程序運行後網路輸出預測值a2,與已知的實際值進行比較,其預測結果整理後見(表6.32)。經計算,對2001年1~12月傷寒副傷寒發病等級進行預測,12個預測結果中,有9個符合,符合率為75%。

圖6.20 神經網路訓練過程圖

表6.32 神經網路模型預測結果與實際值比較

6.3.3.3 模型的評價

本研究採用BP神經網路對傷寒、副傷寒發病率等級進行定量預測,一方面引用數量化理論對不確定因素進行量化處理;另一方面利用神經網路優點,充分考慮各影響因素與發病率之間的非線性映射。

實際應用表明,神經網路定量預測傷寒、副傷寒發病率是理想的。

其主要優點有:

1)避免了模糊或不確定因素的分析工作和具體數學模型的建立工作。

2)完成了輸入和輸出之間復雜的非線性映射關系。

3)採用自適應的信息處理方式,有效減少人為的主觀臆斷性。

雖然如此,但仍存在以下缺點:

1)學習演算法的收斂速度慢,通常需要上千次或更多,訓練時間長。

2)從數學上看,BP演算法有可能存在局部極小問題。

本模型具有廣泛的應用范圍,可以應用在很多領域。從上面的結果可以看出,實際和網路學習數據總體較為接近,演化趨勢也基本一致。說明選定的氣象因子、地質條件因素為神經單元獲得的傷寒、副傷寒發病等級與實際等級比較接近,從而證明傷寒、副傷寒流行與地理因素的確存在較密切的相關性。

6. BP神經網路如何把訓練後的權值輸入至MATLAB 建立網路 完成預測

這個就只能自己編M文件實現了,給個例子你看看

% script: main_batch.m
% 批量方式訓練BP網路,實現性別識別

%% 清理
clear all
clc

%% 讀入數據
% xlsfile='student.xls';
[data,label]=getdata();

%% 劃分數據
[traind,trainl,testd,testl]=divide(data,label);

%% 設置參數

rng('default')
rng(0)
nTrainNum = 60; % 60個訓練樣本
nSampDim = 2; % 樣本是2維的

%% 構造網路
net.nIn = 2; % 輸入層2個神經元,分別輸入身高、體重
net.nHidden = 3; % 3個隱含層節點
net.nOut = 1; % 1個輸出層節點
w = 2*(rand(net.nHidden,net.nIn)-1/2); % nHidden * 3 一行代表一個隱含層節點
b = 2*(rand(net.nHidden,1)-1/2);
net.w1 = [w,b];
W = 2*(rand(net.nOut,net.nHidden)-1/2);
B = 2*(rand(net.nOut,1)-1/2);
net.w2 = [W,B];

%% 訓練數據歸一化
mm=mean(traind);
% 均值平移
for i=1:2
traind_s(:,i)=traind(:,i)-mm(i);
end
% 方差標准化
ml(1) = std(traind_s(:,1));
ml(2) = std(traind_s(:,2));
for i=1:2
traind_s(:,i)=traind_s(:,i)/ml(i);
end

%% 訓練
SampInEx = [traind_s';ones(1,nTrainNum)];
expectedOut=trainl;

eb = 0.01; % 誤差容限
eta = 0.6; % 學習率
mc = 0.8; % 動量因子
maxiter = 2000; % 最大迭代次數
iteration = 0; % 第一代

errRec = zeros(1,maxiter);
outRec = zeros(nTrainNum, maxiter);
NET=[]; % 記錄
% 開始迭代
for i = 1 : maxiter
hid_input = net.w1 * SampInEx; % 隱含層的輸入
hid_out = logsig(hid_input); % 隱含層的輸出

ou_input1 = [hid_out;ones(1,nTrainNum)]; % 輸出層的輸入
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2); % 輸出層的輸出

outRec(:,i) = out_out'; % 記錄每次迭代的輸出

err = expectedOut - out_out; % 誤差
sse = sumsqr(err);
errRec(i) = sse; % 保存誤差值
fprintf('第 %d 次迭代 誤差: %f\n', i, sse);
iteration = iteration + 1;
% 判斷是否收斂
if sse<=eb
break;
end

% 誤差反向傳播
% 隱含層與輸出層之間的局部梯度
DELTA = err.*dlogsig(ou_input2,out_out);
% 輸入層與隱含層之間的局部梯度
delta = net.w2(:,1:end-1)' * DELTA.*dlogsig(hid_input,hid_out);

% 權值修改量
dWEX = DELTA*ou_input1';
dwex = delta*SampInEx';

% 修改權值,如果不是第一次修改,則使用動量因子
if i == 1
net.w2 = net.w2 + eta * dWEX;
net.w1 = net.w1 + eta * dwex;
else
net.w2 = net.w2 + (1 - mc)*eta*dWEX + mc * dWEXOld;
net.w1 = net.w1 + (1 - mc)*eta*dwex + mc * dwexOld;
end
% 記錄上一次的權值修改量
dWEXOld = dWEX;
dwexOld = dwex;

end

%% 測試
% 測試數據歸一化
for i=1:2
testd_s(:,i)=testd(:,i)-mm(i);
end

for i=1:2
testd_s(:,i)=testd_s(:,i)/ml(i);
end

% 計算測試輸出
InEx=[testd_s';ones(1,260-nTrainNum)];
hid_input = net.w1 * InEx;
hid_out = logsig(hid_input); % output of the hidden layer nodes
ou_input1 = [hid_out;ones(1,260-nTrainNum)];
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2);
out_out1=out_out;

% 取整
out_out(out_out<0.5)=0;
out_out(out_out>=0.5)=1;
% 正確率
rate = sum(out_out == testl)/length(out_out);

%% 顯示
% 顯示訓練樣本
train_m = traind(trainl==1,:);
train_m=train_m';
train_f = traind(trainl==0,:);
train_f=train_f';
figure(1)
plot(train_m(1,:),train_m(2,:),'bo');
hold on;
plot(train_f(1,:),train_f(2,:),'r*');
xlabel('身高')
ylabel('體重')
title('訓練樣本分布')
legend('男生','女生')

figure(2)
axis on
hold on
grid
[nRow,nCol] = size(errRec);
plot(1:nCol,errRec,'LineWidth',1.5);
legend('誤差平方和');
xlabel('迭代次數','FontName','Times','FontSize',10);
ylabel('誤差')

fprintf(' ----------------錯誤分類表----------\n')
fprintf(' 編號 標簽 身高 體重\n')
ind= find(out_out ~= testl);
for i=1:length(ind)
fprintf(' %4d %4d %f %f \n', ind(i), testl(ind(i)), testd(ind(i),1), testd(ind(i),2));
end

fprintf('最終迭代次數\n %d\n', iteration);
fprintf('正確率:\n %f%%\n', rate*100);

7. BP神經網路動量因子不理解

BP神經網路在批處理訓練時會陷入局部最小,也就是說誤差能基本不變化其返回的信號對權回值調整很小但是總答誤差能又大於訓練結果設定的總誤差能條件。這個時候加入一個動量因子有助於其反饋的誤差信號使神經元的權值重新振盪起來。可以參看一些專門介紹神經網路的書籍。

8. BP神經網路的神經網路

在人工神經網路發展歷史中,很長一段時間里沒有找到隱層的連接權值調整問題的有效演算法。直到誤差反向傳播演算法(BP演算法)的提出,成功地解決了求解非線性連續函數的多層前饋神經網路權重調整問題。
BP (Back Propagation)神經網路,即誤差反傳誤差反向傳播演算法的學習過程,由信息的正向傳播和誤差的反向傳播兩個過程組成。輸入層各神經元負責接收來自外界的輸入信息,並傳遞給中間層各神經元;中間層是內部信息處理層,負責信息變換,根據信息變化能力的需求,中間層可以設計為單隱層或者多隱層結構;最後一個隱層傳遞到輸出層各神經元的信息,經進一步處理後,完成一次學習的正向傳播處理過程,由輸出層向外界輸出信息處理結果。當實際輸出與期望輸出不符時,進入誤差的反向傳播階段。誤差通過輸出層,按誤差梯度下降的方式修正各層權值,向隱層、輸入層逐層反傳。周而復始的信息正向傳播和誤差反向傳播過程,是各層權值不斷調整的過程,也是神經網路學習訓練的過程,此過程一直進行到網路輸出的誤差減少到可以接受的程度,或者預先設定的學習次數為止。
BP神經網路模型BP網路模型包括其輸入輸出模型、作用函數模型、誤差計算模型和自學習模型。
(1)節點輸出模型
隱節點輸出模型:Oj=f(∑Wij×Xi-qj) (1)
輸出節點輸出模型:Yk=f(∑Tjk×Oj-qk) (2)
f-非線形作用函數;q -神經單元閾值。
(2)作用函數模型
作用函數是反映下層輸入對上層節點刺激脈沖強度的函數又稱刺激函數,一般取為(0,1)內連續取值Sigmoid函數: f(x)=1/(1+e乘方(-x)) (3)
(3)誤差計算模型
誤差計算模型是反映神經網路期望輸出與計算輸出之間誤差大小的函數:
(4)
tpi- i節點的期望輸出值;Opi-i節點計算輸出值。
(4)自學習模型
神經網路的學習過程,即連接下層節點和上層節點之間的權重矩陣Wij的設定和誤差修正過程。BP網路有師學習方式-需要設定期望值和無師學習方式-只需輸入模式之分。自學習模型為
△Wij(n+1)= h ×Фi×Oj+a×△Wij(n) (5)
h -學習因子;Фi-輸出節點i的計算誤差;Oj-輸出節點j的計算輸出;a-動量因子。

9. 求用matlab通過BP神經網路做預測的源程序

load data3_1.txt;
[m,n]=size( data3_1);
tsx = data3_1(1:m-1,1);
tsx=tsx';
ts = data3_1(2:m,1);
ts=ts';
[TSX,TSXps]=mapminmax(tsx,1,2);
[TS,TSps]=mapminmax(ts,1,2);
TSX=TSX';

figure;
plot(ts,'LineWidth',2);
title('到杭旅遊總人數(1999.01.01-2009.12.31)','FontSize',12);
xlabel('統計年份(1990.12.19-2009.08.19)','FontSize',12);
ylabel('歸一化後的總遊客數/萬人','FontSize',12);
grid on;

% 生成BP網路、利用minmax函數求輸入樣本范圍
net_1=newff(minmax(TS),[10,1],{'tansig','purelin'},'traincgf')
% 設置訓練參數
net_1.trainParam.show = 50; %顯示訓練迭代過程(NaN表示不顯示,預設25)
net_1.trainParam.lr = 0.025; %學習率(預設0.01)
net_1.trainParam.mc = 0.9; %動量因子(預設0.9)
net_1.trainParam.epochs = 10000; %最大訓練次數
net_1.trainParam.goal = 0.001; %訓練要求精度

inputWeights=net_1.IW{1,1} %輸入層權值
inputbias=net_1.b{1} %輸入層閾值
layerWeights=net_1.LW{2,1} %輸出層權值
layerbias=net_1.b{2} %輸出層閾值

TS',TSX
% 網路訓練
[net_1,tr]=train(net_1,TS,TSX);

10. 神經網路預測程序

我一直用這個程序,覺得還可以,你試試吧,不過需要你自己根據數據來設置相應的參數~~
close all ;
clear ;
echo on ;
clc ;
% NEWFF——生成一個新的前向神經網路
% TRAIN——對 BP 神經網路進行訓練
% SIM——對 BP 神經網路進行模擬
pause
% 敲任意鍵開始
clc
% 定義訓練樣本
% P 為輸入矢量
p=[ ];
% T 為目標矢量
t= [];
%訓練樣本的歸一化
for i=1:(訓練樣本的指標數)
P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
pause
clc

% 創建一個新的前向神經網路
net=newff(minmax(P),[15,2],{'tansig','purelin'},'traingda'); %這些參數要自己設置
% 當前輸入層權值和閾值
inputWeights=net.IW{1,1};
inputbias=net.b{1} ;
% 當前網路層權值和閾值
layerWeights=net.LW{2,1} ;
layerbias=net.b{2} ;
pause
clc

% 設置訓練參數 也要自己設置
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
%net.trainParam.mc = 0.9; % 附加動量因子
net.trainParam.epochs =5000;
net.trainParam.goal = 1e-4;
pause
clc

% 調用 TRAINGDM 演算法訓練 BP 網路
[net,tr]=train(net,P,t);
pause
clc
% 對 BP 網路進行模擬
p_test=[];
for i=1:6
P_test(i,:)=(p_test(i,:)-min(p_test(i,:)))/(max(p_test(i,:))-min(p_test(i,:)));
end
t_test=[];
A = sim(net,P_test)
% 計算模擬誤差
E = t - A
error=mse(E)
pause
clc
echo off

%反歸一化
for i=1:2
predict(i,:)=A(i,:)*(max(t(i,:))-min(t(i,:)))+ min(t(i,:));
end
predict %即模擬結果
pause

閱讀全文

與bp神經網路動量因子程序相關的資料

熱點內容
截圖保存為哪個文件夾 瀏覽:101
微雲文件無法打開 瀏覽:373
越獄文件管理器哪個好用 瀏覽:947
桌面文件可以保存在哪裡 瀏覽:136
世界之窗修改密碼 瀏覽:555
系統文件巨大 瀏覽:138
重點畢業生數據採集有什麼用 瀏覽:341
手機抖音上的app在哪裡 瀏覽:215
thinkpad裝win7教程 瀏覽:793
2012文件伺服器資源管理器 瀏覽:459
純凈版win1032位改64 瀏覽:413
農產品行業融資主要分析哪些數據 瀏覽:601
華為微信不上網路設置 瀏覽:727
查看qq聊天記錄 瀏覽:931
nih是什麼意思網路用語 瀏覽:456
網路營銷課程設計公眾號論文 瀏覽:902
淘寶低價海關扣押蘋果 瀏覽:335
javadouble和float 瀏覽:303
atmega8下載程序 瀏覽:819
飛鴿傳輸文件和qq哪個快 瀏覽:519

友情鏈接