導航:首頁 > 網路安全 > 如何做神經網路模型

如何做神經網路模型

發布時間:2023-07-10 14:00:19

1. 如何建立神經網路模型

人工神經網路有很多種,我只會最常用的BP神經網路。不同的網路有不同的結構和不同的學習演算法。
簡單點說,人工神經網路就是一個函數。只是這個函數有別於一般的函數。它比普通的函數多了一個學習的過程。
在學習的過程中,它根據正確結果不停地校正自己的網路結構,最後達到一個滿意的精度。這時,它才開始真正的工作階段。
學習人工神經網路最好先安裝MathWords公司出的MatLab軟體。利用該軟體,你可以在一周之內就學會建立你自己的人工神經網路解題模型。
如果你想自己編程實現人工神經網路,那就需要找一本有關的書籍,專門看神經網路學習演算法的那部分內容。因為「學習演算法」是人工神經網路的核心。最常用的BP人工神經網路,使用的就是BP學習演算法。

2. (急)如何用MATLAB建立ANN(人工神經網路模型)

問題描述:
有兩個自變數,一個因變數,10個樣本(這里就取少一點好了)。用實際問題來表述,假設一個股票,開盤價 x1,收盤價 x2,第二天的股價 y。 那用神經網路來預測的目的是,根據10天的開盤價和收盤價,來預測未來股價。顯然,這里的y與x1和x2相關,我們要訓練一個網路(net)來讓他盡可能的預測一個y

MATLAB程序

clc
clear
load data input output
%input就是包含了x1和x2 10天數據的矩陣,說白了就是20個數的矩陣。output是y的一個向量,%10個數
%需要自己找一些數據賦值給input和ouput

P=input;
T=output;
%這里P和T必須是 x1 x2和y的行向量組合。對於P,x1是行向量,x2是行向量。P=[x1;x2]; T=y. y是行向量

Epochs=5000;
NodeNum=12; TypeNum=1;
TF1='logsig'; TF2='purelin';
%設置一些初始參數,Epochs是迭代上限次數,NodeNum是第一個隱藏層的神經元個數,%TypeNum是幾層。TF1和TF2分別定義了幾個傳遞函數。

net=newff(minmax(P),[NodeNum TypeNum],{TF1 TF2},'trainlm');
%建立一個神經網路,訓練輸入和輸出數據都有了,設置隱藏層的個數。

net.trainParam.epochs=Epochs;
net.trainParam.goal=1e-4;
net.trainParam.min_grad=1e-4;
net.trainParam.show=200;
net.trainParam.time=inf;
%設置一些訓練時的參數,第一個是每次訓練的最大迭代次數;

net=train(net,P,T);
%開始網路訓練

P_test=P;
B_test=T;
%就用原始的數據進行測試

X=sim(net,P_test);
%測試

Erro=abs(B_test-X);
sigma=std(Erro);
%計算出預測值和實際值的誤差,求出方差。將來方差可以用來隨機調整

3. 如何用MATLAB神經網路工具箱創建BP神經網路模型

1. 常用的前饋型BP網路的轉移函數有logsig,tansig,有時也會用到線性函數purelin。當網路的最後一層採用曲線函數時,輸出被限制在一個很小的范圍內,如果採用線性函數則輸出可為任意值。以上三個函數是BP網路中最常用到的函數,但是如果需要的話你也可以創建其他可微的轉移函數。
2. 在BP網路中,轉移函數可求導是非常重要的,tansig、logsig和purelin都有對應的導函數dtansig、dlogsig和dpurelin。為了得到更多轉移函數的導函數,可以帶字元"deriv"的轉移函數:tansig('deriv')

4. 神經網路BP模型

一、BP模型概述

誤差逆傳播(Error Back-Propagation)神經網路模型簡稱為BP(Back-Propagation)網路模型。

Pall Werbas博士於1974年在他的博士論文中提出了誤差逆傳播學習演算法。完整提出並被廣泛接受誤差逆傳播學習演算法的是以Rumelhart和McCelland為首的科學家小組。他們在1986年出版「Parallel Distributed Processing,Explorations in the Microstructure of Cognition」(《並行分布信息處理》)一書中,對誤差逆傳播學習演算法進行了詳盡的分析與介紹,並對這一演算法的潛在能力進行了深入探討。

BP網路是一種具有3層或3層以上的階層型神經網路。上、下層之間各神經元實現全連接,即下層的每一個神經元與上層的每一個神經元都實現權連接,而每一層各神經元之間無連接。網路按有教師示教的方式進行學習,當一對學習模式提供給網路後,神經元的激活值從輸入層經各隱含層向輸出層傳播,在輸出層的各神經元獲得網路的輸入響應。在這之後,按減小期望輸出與實際輸出的誤差的方向,從輸入層經各隱含層逐層修正各連接權,最後回到輸入層,故得名「誤差逆傳播學習演算法」。隨著這種誤差逆傳播修正的不斷進行,網路對輸入模式響應的正確率也不斷提高。

BP網路主要應用於以下幾個方面:

1)函數逼近:用輸入模式與相應的期望輸出模式學習一個網路逼近一個函數;

2)模式識別:用一個特定的期望輸出模式將它與輸入模式聯系起來;

3)分類:把輸入模式以所定義的合適方式進行分類;

4)數據壓縮:減少輸出矢量的維數以便於傳輸或存儲。

在人工神經網路的實際應用中,80%~90%的人工神經網路模型採用BP網路或它的變化形式,它也是前向網路的核心部分,體現了人工神經網路最精華的部分。

二、BP模型原理

下面以三層BP網路為例,說明學習和應用的原理。

1.數據定義

P對學習模式(xp,dp),p=1,2,…,P;

輸入模式矩陣X[N][P]=(x1,x2,…,xP);

目標模式矩陣d[M][P]=(d1,d2,…,dP)。

三層BP網路結構

輸入層神經元節點數S0=N,i=1,2,…,S0;

隱含層神經元節點數S1,j=1,2,…,S1;

神經元激活函數f1[S1];

權值矩陣W1[S1][S0];

偏差向量b1[S1]。

輸出層神經元節點數S2=M,k=1,2,…,S2;

神經元激活函數f2[S2];

權值矩陣W2[S2][S1];

偏差向量b2[S2]。

學習參數

目標誤差ϵ;

初始權更新值Δ0

最大權更新值Δmax

權更新值增大倍數η+

權更新值減小倍數η-

2.誤差函數定義

對第p個輸入模式的誤差的計算公式為

中國礦產資源評價新技術與評價新模型

y2kp為BP網的計算輸出。

3.BP網路學習公式推導

BP網路學習公式推導的指導思想是,對網路的權值W、偏差b修正,使誤差函數沿負梯度方向下降,直到網路輸出誤差精度達到目標精度要求,學習結束。

各層輸出計算公式

輸入層

y0i=xi,i=1,2,…,S0;

隱含層

中國礦產資源評價新技術與評價新模型

y1j=f1(z1j),

j=1,2,…,S1;

輸出層

中國礦產資源評價新技術與評價新模型

y2k=f2(z2k),

k=1,2,…,S2。

輸出節點的誤差公式

中國礦產資源評價新技術與評價新模型

對輸出層節點的梯度公式推導

中國礦產資源評價新技術與評價新模型

E是多個y2m的函數,但只有一個y2k與wkj有關,各y2m間相互獨立。

其中

中國礦產資源評價新技術與評價新模型

中國礦產資源評價新技術與評價新模型

設輸出層節點誤差為

δ2k=(dk-y2k)·f2′(z2k),

中國礦產資源評價新技術與評價新模型

同理可得

中國礦產資源評價新技術與評價新模型

對隱含層節點的梯度公式推導

中國礦產資源評價新技術與評價新模型

E是多個y2k的函數,針對某一個w1ji,對應一個y1j,它與所有的y2k有關。因此,上式只存在對k的求和,其中

中國礦產資源評價新技術與評價新模型

中國礦產資源評價新技術與評價新模型

設隱含層節點誤差為

中國礦產資源評價新技術與評價新模型

中國礦產資源評價新技術與評價新模型

同理可得

中國礦產資源評價新技術與評價新模型

4.採用彈性BP演算法(RPROP)計算權值W、偏差b的修正值ΔW,Δb

1993年德國 Martin Riedmiller和Heinrich Braun 在他們的論文「A Direct Adaptive Method for Faster Backpropagation Learning:The RPROP Algorithm」中,提出Resilient Backpropagation演算法——彈性BP演算法(RPROP)。這種方法試圖消除梯度的大小對權步的有害影響,因此,只有梯度的符號被認為表示權更新的方向。

權改變的大小僅僅由權專門的「更新值」

確定

中國礦產資源評價新技術與評價新模型

其中

表示在模式集的所有模式(批學習)上求和的梯度信息,(t)表示t時刻或第t次學習。

權更新遵循規則:如果導數是正(增加誤差),這個權由它的更新值減少。如果導數是負,更新值增加。

中國礦產資源評價新技術與評價新模型

RPROP演算法是根據局部梯度信息實現權步的直接修改。對於每個權,我們引入它的

各自的更新值

,它獨自確定權更新值的大小。這是基於符號相關的自適應過程,它基

於在誤差函數E上的局部梯度信息,按照以下的學習規則更新

中國礦產資源評價新技術與評價新模型

其中0<η-<1<η+

在每個時刻,如果目標函數的梯度改變它的符號,它表示最後的更新太大,更新值

應由權更新值減小倍數因子η-得到減少;如果目標函數的梯度保持它的符號,更新值應由權更新值增大倍數因子η+得到增大。

為了減少自由地可調參數的數目,增大倍數因子η+和減小倍數因子η被設置到固定值

η+=1.2,

η-=0.5,

這兩個值在大量的實踐中得到了很好的效果。

RPROP演算法採用了兩個參數:初始權更新值Δ0和最大權更新值Δmax

當學習開始時,所有的更新值被設置為初始值Δ0,因為它直接確定了前面權步的大小,它應該按照權自身的初值進行選擇,例如,Δ0=0.1(默認設置)。

為了使權不至於變得太大,設置最大權更新值限制Δmax,默認上界設置為

Δmax=50.0。

在很多實驗中,發現通過設置最大權更新值Δmax到相當小的值,例如

Δmax=1.0。

我們可能達到誤差減小的平滑性能。

5.計算修正權值W、偏差b

第t次學習,權值W、偏差b的的修正公式

W(t)=W(t-1)+ΔW(t)

b(t)=b(t-1)+Δb(t)

其中,t為學習次數。

6.BP網路學習成功結束條件每次學習累積誤差平方和

中國礦產資源評價新技術與評價新模型

每次學習平均誤差

中國礦產資源評價新技術與評價新模型

當平均誤差MSE<ε,BP網路學習成功結束。

7.BP網路應用預測

在應用BP網路時,提供網路輸入給輸入層,應用給定的BP網路及BP網路學習得到的權值W、偏差b,網路輸入經過從輸入層經各隱含層向輸出層的「順傳播」過程,計算出BP網的預測輸出。

8.神經元激活函數f

線性函數

f(x)=x,

f′(x)=1,

f(x)的輸入范圍(-∞,+∞),輸出范圍(-∞,+∞)。

一般用於輸出層,可使網路輸出任何值。

S型函數S(x)

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍(0,1)。

f′(x)=f(x)[1-f(x)],

f′(x)的輸入范圍(-∞,+∞),輸出范圍(0,

]。

一般用於隱含層,可使范圍(-∞,+∞)的輸入,變成(0,1)的網路輸出,對較大的輸入,放大系數較小;而對較小的輸入,放大系數較大,所以可用來處理和逼近非線性的輸入/輸出關系。

在用於模式識別時,可用於輸出層,產生逼近於0或1的二值輸出。

雙曲正切S型函數

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍(-1,1)。

f′(x)=1-f(x)·f(x),

f′(x)的輸入范圍(-∞,+∞),輸出范圍(0,1]。

一般用於隱含層,可使范圍(-∞,+∞)的輸入,變成(-1,1)的網路輸出,對較大的輸入,放大系數較小;而對較小的輸入,放大系數較大,所以可用來處理和逼近非線性的輸入/輸出關系。

階梯函數

類型1

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍{0,1}。

f′(x)=0。

類型2

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍{-1,1}。

f′(x)=0。

斜坡函數

類型1

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍[0,1]。

中國礦產資源評價新技術與評價新模型

f′(x)的輸入范圍(-∞,+∞),輸出范圍{0,1}。

類型2

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍[-1,1]。

中國礦產資源評價新技術與評價新模型

f′(x)的輸入范圍(-∞,+∞),輸出范圍{0,1}。

三、總體演算法

1.三層BP網路(含輸入層,隱含層,輸出層)權值W、偏差b初始化總體演算法

(1)輸入參數X[N][P],S0,S1,f1[S1],S2,f2[S2];

(2)計算輸入模式X[N][P]各個變數的最大值,最小值矩陣 Xmax[N],Xmin[N];

(3)隱含層的權值W1,偏差b1初始化。

情形1:隱含層激活函數f( )都是雙曲正切S型函數

1)計算輸入模式X[N][P]的每個變數的范圍向量Xrng[N];

2)計算輸入模式X的每個變數的范圍均值向量Xmid[N];

3)計算W,b的幅度因子Wmag

4)產生[-1,1]之間均勻分布的S0×1維隨機數矩陣Rand[S1];

5)產生均值為0,方差為1的正態分布的S1×S0維隨機數矩陣Randnr[S1][S0],隨機數范圍大致在[-1,1];

6)計算W[S1][S0],b[S1];

7)計算隱含層的初始化權值W1[S1][S0];

8)計算隱含層的初始化偏差b1[S1];

9))輸出W1[S1][S0],b1[S1]。

情形2:隱含層激活函數f( )都是S型函數

1)計算輸入模式X[N][P]的每個變數的范圍向量Xrng[N];

2)計算輸入模式X的每個變數的范圍均值向量Xmid[N];

3)計算W,b的幅度因子Wmag;

4)產生[-1,1]之間均勻分布的S0×1維隨機數矩陣Rand[S1];

5)產生均值為0,方差為1的正態分布的S1×S0維隨機數矩陣Randnr[S1][S0],隨機數范圍大致在[-1,1];

6)計算W[S1][S0],b[S1];

7)計算隱含層的初始化權值W1[S1][S0];

8)計算隱含層的初始化偏差b1[S1];

9)輸出W1[S1][S0],b1[S1]。

情形3:隱含層激活函數f( )為其他函數的情形

1)計算輸入模式X[N][P]的每個變數的范圍向量Xrng[N];

2)計算輸入模式X的每個變數的范圍均值向量Xmid[N];

3)計算W,b的幅度因子Wmag

4)產生[-1,1]之間均勻分布的S0×1維隨機數矩陣Rand[S1];

5)產生均值為0,方差為1的正態分布的S1×S0維隨機數矩陣Randnr[S1][S0],隨機數范圍大致在[-1,1];

6)計算W[S1][S0],b[S1];

7)計算隱含層的初始化權值W1[S1][S0];

8)計算隱含層的初始化偏差b1[S1];

9)輸出W1[S1][S0],b1[S1]。

(4)輸出層的權值W2,偏差b2初始化

1)產生[-1,1]之間均勻分布的S2×S1維隨機數矩陣W2[S2][S1];

2)產生[-1,1]之間均勻分布的S2×1維隨機數矩陣b2[S2];

3)輸出W2[S2][S1],b2[S2]。

2.應用彈性BP演算法(RPROP)學習三層BP網路(含輸入層,隱含層,輸出層)權值W、偏差b總體演算法

函數:Train3BP_RPROP(S0,X,P,S1,W1,b1,f1,S2,W2,b2,f2,d,TP)

(1)輸入參數

P對模式(xp,dp),p=1,2,…,P;

三層BP網路結構;

學習參數。

(2)學習初始化

1)

2)各層W,b的梯度值

初始化為零矩陣。

(3)由輸入模式X求第一次學習各層輸出y0,y1,y2及第一次學習平均誤差MSE

(4)進入學習循環

epoch=1

(5)判斷每次學習誤差是否達到目標誤差要求

如果MSE<ϵ,

則,跳出epoch循環,

轉到(12)。

(6)保存第epoch-1次學習產生的各層W,b的梯度值

(7)求第epoch次學習各層W,b的梯度值

1)求各層誤差反向傳播值δ;

2)求第p次各層W,b的梯度值

3)求p=1,2,…,P次模式產生的W,b的梯度值

的累加。

(8)如果epoch=1,則將第epoch-1次學習的各層W,b的梯度值

設為第epoch次學習產生的各層W,b的梯度值

(9)求各層W,b的更新

1)求權更新值Δij更新;

2)求W,b的權更新值

3)求第epoch次學習修正後的各層W,b。

(10)用修正後各層W、b,由X求第epoch次學習各層輸出y0,y1,y2及第epoch次學習誤差MSE

(11)epoch=epoch+1,

如果epoch≤MAX_EPOCH,轉到(5);

否則,轉到(12)。

(12)輸出處理

1)如果MSE<ε,

則學習達到目標誤差要求,輸出W1,b1,W2,b2

2)如果MSE≥ε,

則學習沒有達到目標誤差要求,再次學習。

(13)結束

3.三層BP網路(含輸入層,隱含層,輸出層)預測總體演算法

首先應用Train3lBP_RPROP( )學習三層BP網路(含輸入層,隱含層,輸出層)權值W、偏差b,然後應用三層BP網路(含輸入層,隱含層,輸出層)預測。

函數:Simu3lBP( )。

1)輸入參數:

P個需預測的輸入數據向量xp,p=1,2,…,P;

三層BP網路結構;

學習得到的各層權值W、偏差b。

2)計算P個需預測的輸入數據向量xp(p=1,2,…,P)的網路輸出 y2[S2][P],輸出預測結果y2[S2][P]。

四、總體演算法流程圖

BP網路總體演算法流程圖見附圖2。

五、數據流圖

BP網數據流圖見附圖1。

六、實例

實例一 全國銅礦化探異常數據BP 模型分類

1.全國銅礦化探異常數據准備

在全國銅礦化探數據上用穩健統計學方法選取銅異常下限值33.1,生成全國銅礦化探異常數據。

2.模型數據准備

根據全國銅礦化探異常數據,選取7類33個礦點的化探數據作為模型數據。這7類分別是岩漿岩型銅礦、斑岩型銅礦、矽卡岩型、海相火山型銅礦、陸相火山型銅礦、受變質型銅礦、海相沉積型銅礦,另添加了一類沒有銅異常的模型(表8-1)。

3.測試數據准備

全國化探數據作為測試數據集。

4.BP網路結構

隱層數2,輸入層到輸出層向量維數分別為14,9、5、1。學習率設置為0.9,系統誤差1e-5。沒有動量項。

表8-1 模型數據表

續表

5.計算結果圖

如圖8-2、圖8-3。

圖8-2

圖8-3 全國銅礦礦床類型BP模型分類示意圖

實例二 全國金礦礦石量品位數據BP 模型分類

1.模型數據准備

根據全國金礦儲量品位數據,選取4類34個礦床數據作為模型數據,這4類分別是綠岩型金礦、與中酸性浸入岩有關的熱液型金礦、微細浸染型型金礦、火山熱液型金礦(表8-2)。

2.測試數據准備

模型樣本點和部分金礦點金屬量、礦石量、品位數據作為測試數據集。

3.BP網路結構

輸入層為三維,隱層1層,隱層為三維,輸出層為四維,學習率設置為0.8,系統誤差1e-4,迭代次數5000。

表8-2 模型數據

4.計算結果

結果見表8-3、8-4。

表8-3 訓練學習結果

表8-4 預測結果(部分)

續表

5. 如何在R語言中進行神經網路模型的建立

不能發鏈接,所以我復制過來了。

#載入程序和數據
library(RSNNS)
data(iris)
#將數據順序打亂
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定義網路輸入
irisValues <- iris[,1:4]
#定義網路輸出,並將數據進行格式轉換
irisTargets <- decodeClassLabels(iris[,5])
#從中劃分出訓練樣本和檢驗樣本
iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#數據標准化
iris <- normTrainingAndTestSet(iris)
#利用mlp命令執行前饋反向傳播神經網路演算法
model <- mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)
#利用上面建立的模型進行預測
predictions <- predict(model,iris$inputsTest)
#生成混淆矩陣,觀察預測精度
confusionMatrix(iris$targetsTest,predictions)
#結果如下:
# predictions
#targets 1 2 3
# 1 8 0 0
# 2 0 4 0
# 3 0 1 10

6. 如何建立bp神經網路預測 模型

建立BP神經網路預測 模型,可按下列步驟進行:

1、提供原始數據

2、訓練數據預測數據提取及歸一化

3、BP網路訓練

4、BP網路預測

5、結果分析

現用一個實際的例子,來預測2015年和2016年某地區的人口數。

已知2009年——2014年某地區人口數分別為3583、4150、5062、4628、5270、5340萬人

執行BP_main程序,得到

[ 2015, 5128.631704710423946380615234375]

[ 2016, 5100.5797325642779469490051269531]

代碼及圖形如下。

7. 如何用matlab構建一個三層bp神經網路模型,用於預測溫度。

第0節、引例
本文以Fisher的Iris數據集作為神經網路程序的測試數據集。Iris數據集可以在http://en.wikipedia.org/wiki/Iris_flower_data_set 找到。這里簡要介紹一下Iris數據集:
有一批Iris花,已知這批Iris花可分為3個品種,現需要對其進行分類。不同品種的Iris花的花萼長度、花萼寬度、花瓣長度、花瓣寬度會有差異。我們現有一批已知品種的Iris花的花萼長度、花萼寬度、花瓣長度、花瓣寬度的數據。
一種解決方法是用已有的數據訓練一個神經網路用作分類器。
如果你只想用C#或Matlab快速實現神經網路來解決你手頭上的問題,或者已經了解神經網路基本原理,請直接跳到第二節——神經網路實現。

第一節、神經網路基本原理
1. 人工神經元( Artificial Neuron )模型
人工神經元是神經網路的基本元素,其原理可以用下圖表示:

圖1. 人工神經元模型

圖中x1~xn是從其他神經元傳來的輸入信號,wij表示表示從神經元j到神經元i的連接權值,θ表示一個閾值 ( threshold ),或稱為偏置( bias )。則神經元i的輸出與輸入的關系表示為:

圖中 yi表示神經元i的輸出,函數f稱為激活函數 ( Activation Function )或轉移函數 ( Transfer Function ) ,net稱為凈激活(net activation)。若將閾值看成是神經元i的一個輸入x0的權重wi0,則上面的式子可以簡化為:

若用X表示輸入向量,用W表示權重向量,即:
X = [ x0 , x1 , x2 , ....... , xn ]

則神經元的輸出可以表示為向量相乘的形式:

若神經元的凈激活net為正,稱該神經元處於激活狀態或興奮狀態(fire),若凈激活net為負,則稱神經元處於抑制狀態。
圖1中的這種「閾值加權和」的神經元模型稱為M-P模型 ( McCulloch-Pitts Model ),也稱為神經網路的一個處理單元( PE, Processing Element )。

2. 常用激活函數
激活函數的選擇是構建神經網路過程中的重要環節,下面簡要介紹常用的激活函數。
(1) 線性函數 ( Liner Function )

(2) 斜面函數 ( Ramp Function )

(3) 閾值函數 ( Threshold Function )

以上3個激活函數都屬於線性函數,下面介紹兩個常用的非線性激活函數。
(4) S形函數 ( Sigmoid Function )

該函數的導函數:

(5) 雙極S形函數

該函數的導函數:

S形函數與雙極S形函數的圖像如下:

圖3. S形函數與雙極S形函數圖像
雙極S形函數與S形函數主要區別在於函數的值域,雙極S形函數值域是(-1,1),而S形函數值域是(0,1)。
由於S形函數與雙極S形函數都是可導的(導函數是連續函數),因此適合用在BP神經網路中。(BP演算法要求激活函數可導)
具體http://blog.csdn.net/gongxq0124/article/details/7681000/

8. 2.搭建一個神經網路模型訓練MNIST手寫體數字數據集中遇到的問題及解決方法

批量輸入後,如何使用numpy矩陣計算的方法計算各權值梯度,提高計算速度

def backprop(self, x, y): #x為多維矩陣。每列為一個x值。 y為多維矩陣。每列為一個y值。

batch_num=x.shape[1]

#print(x.shape)

#print(y.shape)

"""創建兩個變數,用來存儲所有b值和所有w值對應的梯度值。初始化為0.nabla_b為一個list,形狀與biases的形狀完全一致。nabla_w 為一個list,形狀與weights的形狀完全一致。

"""

nabla_b = [np.zeros(b.shape) for b in self.biases]

nabla_w = [np.zeros(w.shape) for w in self.weights]

# feedforward

"""activations,用來所有中間層和輸出層在一次前向計算過程中的最終輸出值,即a值。該值記錄下來,以供後期使用BP演算法求每個b和w的梯度。

"""

activation = x #x為本批多個x為列組成的矩陣。

activations = [x] # list to store all the activations, layer by layer

"""zs,用來所有中間層和輸出層在一次前向計算過程中的線性輸出值,即z值。該值記錄下來,以供後期使用BP演算法求每個b和w的梯度。

"""

zs = [] # list to store all the z vectors, layer by layer ,zs的每個元素為本batch的x對應的z為列構成的矩陣。


"""

通過一次正向計算,將中間層和輸出層所有的z值和a值全部計算出來,並存儲起來。供接下來求梯度使用。

"""

for b, w in zip(self.biases, self.weights):

#print(w.shape)

#print(np.dot(w, activation).shape)

#print(b.shape)

z = np.dot(w, activation)+b #z為本batch的x對應的z為列構成的矩陣。

zs.append(z)

activation = sigmoid(z)

activations.append(activation)


"""

以下部分是採用BP演算法求解每個可訓練參數的計算方法。是權重更新過程中的關鍵。

"""

# backward pass

# 求出輸出層的delta值

delta = ((activations[-1]-y) * sigmoid_prime(zs[-1]))

nabla_b[-1] = delta.mean(axis=1).reshape(-1, 1)

nabla_w[-1] =np.dot(delta,activations[-2].transpose())/batch_num

# Note that the variable l in the loop below is used a little

# differently to the notation in Chapter 2 of the book. Here,

# l = 1 means the last layer of neurons, l = 2 is the

# second-last layer, and so on. It's a renumbering of the

# scheme in the book, used here to take advantage of the fact

# that Python can use negative indices in lists.

for l in range(2, self.num_layers):

z = zs[-l]

sp = sigmoid_prime(z)

delta = (np.dot(self.weights[-l+1].transpose(), delta) * sp)

nabla_b[-l] = delta.mean(axis=1).reshape(-1, 1)

nabla_w[-l] =np.dot(delta,activations[-l-1].transpose())/batch_num

return (nabla_b, nabla_w)


##梯度計算後,如何更新各權值


def update_mini_batch(self, mini_batch, eta):

"""Update the network's weights and biases by applying

gradient descent using backpropagation to a single mini batch.

The ``mini_batch`` is a list of tuples ``(x, y)``, and ``eta``

is the learning rate."""

""" 初始化變數,去存儲各訓練參數的微分和。

"""

nabla_b = [np.zeros(b.shape) for b in self.biases]

nabla_w = [np.zeros(w.shape) for w in self.weights]

""" 循環獲取batch中的每個數據,獲取各訓練參數的微分,相加後獲得各訓練參數的微分和。

"""

x_batch=None

y_batch=None

for x, y in mini_batch:

if( x_batch is None):

x_batch=x

else:

x_batch=np.append(x_batch,x,axis=1)

if( y_batch is None):

y_batch=y

else:

y_batch=np.append(y_batch,y,axis=1)

delta_nabla_b, delta_nabla_w = self.backprop(x_batch, y_batch)

nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]

nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]

""" 使用各訓練參數的平均微分和與步長的乘積,去更新每個訓練參數

"""

self.weights = [w-eta*nw

for w, nw in zip(self.weights, nabla_w)]

self.biases = [b-eta*nb

for b, nb in zip(self.biases, nabla_b)]

閱讀全文

與如何做神經網路模型相關的資料

熱點內容
網路麻將怎麼打 瀏覽:681
網路用語dgjj什麼意思 瀏覽:911
怎樣找到電腦網路賬號 瀏覽:15
蘋果手機打開軟體網路特別卡 瀏覽:718
網路安全保障人員培訓 瀏覽:39
網路寬頻上行下行調多少 瀏覽:1000
降檔什麼意思網路語 瀏覽:929
設置了dns網路快了好多 瀏覽:909
老路由器網路卡頓怎麼辦 瀏覽:65
億聯網路股票是哪個板塊 瀏覽:289
計算機網路支撐技術包括 瀏覽:133
vpm蘋果網路加速 瀏覽:900
蘋果6怎麼修改網路 瀏覽:953
全球手機網路最貴的國家是 瀏覽:541
計算機網路空間技術是干什麼的 瀏覽:445
電視上如何添加網路 瀏覽:683
數據網路基帶需要多少錢 瀏覽:318
wifi算有線還是無線網路 瀏覽:511
區域網有網卡驅動怎麼連接網路 瀏覽:882
專升本計算機網路 瀏覽:351

友情鏈接