⑴ BP人工神經網路方法
(一)方法原理
人工神經網路是由大量的類似人腦神經元的簡單處理單元廣泛地相互連接而成的復雜的網路系統。理論和實踐表明,在信息處理方面,神經網路方法比傳統模式識別方法更具有優勢。人工神經元是神經網路的基本處理單元,其接收的信息為x1,x2,…,xn,而ωij表示第i個神經元到第j個神經元的連接強度或稱權重。神經元的輸入是接收信息X=(x1,x2,…,xn)與權重W={ωij}的點積,將輸入與設定的某一閾值作比較,再經過某種神經元激活函數f的作用,便得到該神經元的輸出Oi。常見的激活函數為Sigmoid型。人工神經元的輸入與輸出的關系為
地球物理勘探概論
式中:xi為第i個輸入元素,即n維輸入矢量X的第i個分量;ωi為第i個輸入與處理單元間的互聯權重;θ為處理單元的內部閾值;y為處理單元的輸出。
常用的人工神經網路是BP網路,它由輸入層、隱含層和輸出層三部分組成。BP演算法是一種有監督的模式識別方法,包括學習和識別兩部分,其中學習過程又可分為正向傳播和反向傳播兩部分。正向傳播開始時,對所有的連接權值置隨機數作為初值,選取模式集的任一模式作為輸入,轉向隱含層處理,並在輸出層得到該模式對應的輸出值。每一層神經元狀態隻影響下一層神經元狀態。此時,輸出值一般與期望值存在較大的誤差,需要通過誤差反向傳遞過程,計算模式的各層神經元權值的變化量
(二)BP神經網路計算步驟
(1)初始化連接權值和閾值為一小的隨機值,即W(0)=任意值,θ(0)=任意值。
(2)輸入一個樣本X。
(3)正向傳播,計算實際輸出,即根據輸入樣本值、互聯權值和閾值,計算樣本的實際輸出。其中輸入層的輸出等於輸入樣本值,隱含層和輸出層的輸入為
地球物理勘探概論
輸出為
地球物理勘探概論
式中:f為閾值邏輯函數,一般取Sigmoid函數,即
地球物理勘探概論
式中:θj表示閾值或偏置;θ0的作用是調節Sigmoid函數的形狀。較小的θ0將使Sigmoid函數逼近於閾值邏輯單元的特徵,較大的θ0將導致Sigmoid函數變平緩,一般取θ0=1。
(4)計算實際輸出與理想輸出的誤差
地球物理勘探概論
式中:tpk為理想輸出;Opk為實際輸出;p為樣本號;k為輸出節點號。
(5)誤差反向傳播,修改權值
地球物理勘探概論
式中:
地球物理勘探概論
地球物理勘探概論
(6)判斷收斂。若誤差小於給定值,則結束,否則轉向步驟(2)。
(三)塔北雅克拉地區BP神經網路預測實例
以塔北雅克拉地區S4井為已知樣本,取氧化還原電位,放射性元素Rn、Th、Tc、U、K和地震反射
S4井位於測區西南部5線25點,是區內唯一已知井。該井在5390.6m的侏羅系地層獲得40.6m厚的油氣層,在5482m深的震旦系地層中獲58m厚的油氣層。取S4井周圍9個點,即4~6線的23~25 點作為已知油氣的訓練樣本;由於區內沒有未見油的鑽井,只好根據地質資料分析,選取14~16線的55~57點作為非油氣的訓練樣本。BP網路學習迭代17174次,總誤差為0.0001,學習效果相當滿意。以學習後的網路進行識別,得出結果如圖6-2-4所示。
圖6-2-4 塔北雅克拉地區BP神經網路聚類結果
(據劉天佑等,1997)
由圖6-2-4可見,由預測值大於0.9可得5個大封閉圈遠景區,其中測區南部①號遠景區對應著已知油井S4井;②、③號油氣遠景區位於地震勘探所查明的托庫1、2號構造,該兩個構造位於沙雅隆起的東段,其西段即為1984年鑽遇高產油氣流的Sch2井,應是含油氣性好的遠景區;④、⑤號遠景區位於大澇壩構造,是yh油田的組成部分。
⑵ matlab BP神經網路出錯 newff參數 隱含層 怎麼確定
設[P,T]是訓練樣本,[X,Y]是測試樣本;
net=newrb(P,T,err_goal,spread); %建立網路
q=sim(net,p);
e=q-T;
plot(p,q); %畫訓練誤差曲線
q=sim(net,X);
e=q-Y;
plot(X,q); %畫測試誤差曲線
訓練前饋網路的第一步是建立網路對象。函數newff建立一個可訓練的前饋網路。這需要4個輸入參數。
第一個參數是一個Rx2的矩陣以定義R個輸入向量的最小值和最大值。
第二個參數是一個設定每層神經元個數的數組。
第三個參數是包含每層用到的傳遞函數名稱的細胞數組。
最後一個參數是用到的訓練函數的名稱。
舉個例子,下面命令將創建一個二層網路。它的輸入是兩個元素的向量,第一層有三個神經元(3),第二層有一個神經元(1)。
第一層的傳遞函數是tan-sigmoid,輸出層的傳遞函數是linear。
輸入向量的第一個元素的范圍是-1到2[-1 2],輸入向量的第二個元素的范圍是0到5[0 5],訓練函數是traingd。
net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');
這個命令建立了網路對象並且初始化了網路權重和偏置,因此網路就可以進行訓練了。
我們可能要多次重新初始化權重或者進行自定義的初始化。
下面就是初始化的詳細步驟。
在訓練前饋網路之前,權重和偏置必須被初始化。初始化權重和偏置的工作用命令init來實現。這個函數接收網路對象並初始化權重和偏置後返回網路對象。
下面就是網路如何初始化的:
net = init(net);
我們可以通過設定網路參數net.initFcn和net.layer{i}.initFcn這一技巧來初始化一個給定的網路。
net.initFcn用來決定整個網路的初始化函數。前饋網路的預設值為initlay,它允許每一層用單獨的初始化函數。
設定了net.initFcn ,那麼參數net.layer{i}.initFcn 也要設定用來決定每一層的初始化函數。
對前饋網路來說,有兩種不同的初始化方式經常被用到:initwb和initnw。initwb函數根據每一層自己的初始化參數(net.inputWeights{i,j}.initFcn)初始化權重矩陣和偏置。前饋網路的初始化權重通常設為rands,它使權重在-1到1之間隨機取值。這種方式經常用在轉換函數是線性函數時。initnw通常用於轉換函數是曲線函數。它根據Nguyen和Widrow[NgWi90]為層產生初始權重和偏置值,使得每層神經元的活動區域能大致平坦的分布在輸入空間。
⑶ 如何創建兩個隱藏層的BP神經網路
我自己的總結是:
1,隱層的神經網路演算法1.1構造方法選擇
首先使用三個隱藏層的數量來確定三個隱藏層數找到的最小值和最大值的值,然後從最小來驗證模型的預測誤差,直到它達到最大值。最後,選擇模型誤差最小隱藏層數。該方法適用於兩個隱藏層的網路。
1.2 Delete方法
單隱層網路的非線性映射能力弱,同樣的問題,以達到預定的隱層節點之間的映射一些,以增加網路的可調參數,它是適合用於刪除法。
1.3黃金分割法
的主要思路:一是在[A,B]尋找理想的隱層節點,從而充分保證逼近能力和泛化能力的網路。為了滿足高精度近似,在金色的原則,按照擴大搜尋范圍區間,即該區間[B,C] = 0.619 *(鈣)+ A)(其中B,范圍[B,C]尋找最佳逼近能力更應要求隱層節點數,在實際應用中,人們可以選擇。
⑷ BP神經網路中隱含層的神經元數怎麼確定
經驗公式未必能達到理想效果,這個真的需要一個個嘗試。可以先按樓上說的設定,然後再根據結果的誤差以及收斂速度來一個個調整。
⑸ BP神經網路怎樣確定傳輸函數和隱層個數。。。。。
BP網路一般都是用三層的,四層及以上的都比較少用;
傳輸函數的選擇,這個怎麼說,假設你想預測的結果是幾個固定值,如1,0等,滿足某個條件輸出1,不滿足則0的話,首先想到的是hardlim函數,閾值型的,當然也可以考慮其他的;
然後,假如網路是用來表達某種線性關系時,用purelin---線性傳輸函數;
若是非線性關系的話,用別的非線性傳遞函數,多層網路時,每層不一定要用相同的傳遞函數,可以是三種配合,可以使非線性和線性,閾值的傳遞函數等;
compet---競爭型傳遞函數;
hardlim---閾值型傳遞函數;
hardlims---對稱閾值型傳輸函數;
logsig---S型傳輸函數;
poslin---正線性傳輸函數;
purelin---線性傳輸函數;
radbas---徑向基傳輸函數;
satlin---飽和線性傳輸函數;
satlins---飽和對稱線性傳輸函數;
softmax---柔性最大值傳輸函數;
tanhsig---雙曲正切S型傳輸函數;
tribas---三角形徑向基傳輸函數;
⑹ matlab建立bp神經網路如何設置兩個隱含層呢
題主那個newff裡面的10看到沒?那個就是設置1個隱含層的神經元個數,要多個隱含層就把10改成[4,10,1]就是第一個隱含層有4個神經元,第二個隱含層10個神經元,最後一層輸出層1個神經元。然後你的{TF1 TF2}不用改。這樣應該能用了。
然後給你一個newff的各項參數使用的介紹:
⑺ matlabBP神經網路工具箱,可以調整隱含層節點數嘛
Matlab神經網路工具箱幾乎包含了現有神經網路的最新成果,神經網路工具箱模型包括感知器、線性網路、BP網路、徑向基函數網路、競爭型神經網路、自組織網路和學習向量量化網路、反饋網路BP神經網路具有很強的映射能力,主要用於模式識別分類、函數逼近、函數壓縮等。下面通過實例來說明BP網路在函數逼近方面的應用需要逼近的函數是f(x)=1+sin(k*pi/2*x),其中,選擇k=2進行模擬,設置隱藏層神經元數目為n,n可以改變,便於後面觀察隱藏層節點與函數逼近能力的關系。
⑻ 深入淺出BP神經網路演算法的原理
深入淺出BP神經網路演算法的原理
相信每位剛接觸神經網路的時候都會先碰到BP演算法的問題,如何形象快速地理解BP神經網路就是我們學習的高級樂趣了(畫外音:樂趣?你在跟我談樂趣?)
本篇博文就是要簡單粗暴地幫助各位童鞋快速入門採取BP演算法的神經網路。
BP神經網路是怎樣的一種定義?看這句話:一種按「誤差逆傳播演算法訓練」的多層前饋網路。
BP的思想就是:利用輸出後的誤差來估計輸出層前一層的誤差,再用這層誤差來估計更前一層誤差,如此獲取所有各層誤差估計。這里的誤差估計可以理解為某種偏導數,我們就是根據這種偏導數來調整各層的連接權值,再用調整後的連接權值重新計算輸出誤差。直到輸出的誤差達到符合的要求或者迭代次數溢出設定值。
說來說去,「誤差」這個詞說的很多嘛,說明這個演算法是不是跟誤差有很大的關系?
沒錯,BP的傳播對象就是「誤差」,傳播目的就是得到所有層的估計誤差。
它的學習規則是:使用最速下降法,通過反向傳播(就是一層一層往前傳)不斷調整網路的權值和閾值,最後使全局誤差系數最小。
它的學習本質就是:對各連接權值的動態調整。
拓撲結構如上圖:輸入層(input),隱藏層(hide layer),輸出層(output)
BP網路的優勢就是能學習和儲存大量的輸入輸出的關系,而不用事先指出這種數學關系。那麼它是如何學習的?
BP利用處處可導的激活函數來描述該層輸入與該層輸出的關系,常用S型函數δ來當作激活函數。
我們現在開始有監督的BP神經網路學習演算法:
1、正向傳播得到輸出層誤差e
=>輸入層輸入樣本=>各隱藏層=>輸出層
2、判斷是否反向傳播
=>若輸出層誤差與期望不符=>反向傳播
3、誤差反向傳播
=>誤差在各層顯示=>修正各層單元的權值,直到誤差減少到可接受程度。
演算法闡述起來比較簡單,接下來通過數學公式來認識BP的真實面目。
假設我們的網路結構是一個含有N個神經元的輸入層,含有P個神經元的隱層,含有Q個神經元的輸出層。
這些變數分別如下:
認識好以上變數後,開始計算:
一、用(-1,1)內的隨機數初始化誤差函數,並設定精度ε,最多迭代次數M
二、隨機選取第k個輸入樣本及對應的期望輸出
重復以下步驟至誤差達到要求:
三、計算隱含層各神經元的輸入和輸出
四、計算誤差函數e對輸出層各神經元的偏導數,根據輸出層期望輸出和實際輸出以及輸出層輸入等參數計算。
五、計算誤差函數對隱藏層各神經元的偏導數,根據後一層(這里即輸出層)的靈敏度(稍後介紹靈敏度)δo(k),後一層連接權值w,以及該層的輸入值等參數計算
六、利用第四步中的偏導數來修正輸出層連接權值
七、利用第五步中的偏導數來修正隱藏層連接權值
八、計算全局誤差(m個樣本,q個類別)
比較具體的計算方法介紹好了,接下來用比較簡潔的數學公式來大致地概括這個過程,相信看完上述的詳細步驟都會有些了解和領悟。
假設我們的神經網路是這樣的,此時有兩個隱藏層。
我們先來理解靈敏度是什麼?
看下面一個公式:
這個公式是誤差對b的一個偏導數,這個b是怎麼?它是一個基,靈敏度δ就是誤差對基的變化率,也就是導數。
因為?u/?b=1,所以?E/?b=?E/?u=δ,也就是說bias基的靈敏度?E/?b=δ等於誤差E對一個節點全部輸入u的導數?E/?u。
也可以認為這里的靈敏度等於誤差E對該層輸入的導數,注意了,這里的輸入是上圖U級別的輸入,即已經完成層與層權值計算後的輸入。
每一個隱藏層第l層的靈敏度為:
這里的「?」表示每個元素相乘,不懂的可與上面詳細公式對比理解
而輸出層的靈敏度計算方法不同,為:
而最後的修正權值為靈敏度乘以該層的輸入值,注意了,這里的輸入可是未曾乘以權值的輸入,即上圖的Xi級別。
對於每一個權值(W)ij都有一個特定的學習率ηIj,由演算法學習完成。
⑼ bp神經網路隱含層的誤差是如何得到的
1、神經網路演算法隱含層的選取 1.1 構造法首先運用三種確定隱含層層數的方法得到三個隱含層層數,找到最小值和最大值,然後從最小值開始逐個驗證模型預測誤差,直到達到最大值。最後選取模型誤差最小的那個隱含層層數。該方法適用於雙隱含層網路。 1.2 刪除法單隱含層網路非線性映射能力較弱,相同問題,為達到預定映射關系,隱層節點要多一些,以增加網路的可調參數,故適合運用刪除法。 1.3黃金分割法演算法的主要思想:首先在[a,b]內尋找理想的隱含層節點數,這樣就充分保證了網路的逼近能力和泛化能力。為滿足高精度逼近的要求,再按照黃金分割原理拓展搜索區間,即得到區間[b,c](其中b=0.619*(c-a)+a),在區間[b,c]中搜索最優,則得到逼近能力更強的隱含層節點數,在實際應用根據要求,從中選取其一即可。 BP演算法中,權值和閾值是每訓練一次,調整一次。逐步試驗得到隱層節點數就是先設置一個初始值,然後在這個值的基礎上逐漸增加,比較每次網路的預測性能,選擇性能最好的對應的節點數作為隱含層神經元節點數。
⑽ matlab 實現BP神經網路 怎樣根據隱含層和輸入層的權值閾值得到輸入到輸出的計算公式
訓練好的權值、閾值的輸出方法是:
輸入到隱層權值:
w1=net.iw
隱層閾值:
theta1=net.b
隱層到輸出層權值:
w2=net.lw;
輸出層閾值:
theta2=net.b
這是我常逛的論壇,你有興趣的可以看一下。