當前位置:
首頁 > 最新 > 單隱層BP神經網路的Python實現

單隱層BP神經網路的Python實現

上次我們談了BP神經網路中反向傳遞的公式推導,這次就用Python來實現一個單隱層BP神經網路。

用BP神經網路建模的整個流程主要包括初始化模型和訓練模型兩部分。初始化模型包括導入數據和根據樣本的維度初始化參數;訓練模型包括以下兩步:第一步,輸入數據,正向計算得到隱藏層的輸出Z和最終輸出Y;第二步,反向傳遞,利用Y和Z更新參數;不斷重複這兩步,計算cost和正確率。在運行到設定的次數後停止。

接下來,我們按上文說的建模流程,用Python實現一個簡單的單隱層BP神經網路。

我們手動設定了這個模型的樣本和參數的維度:

根據defsize中設定的維度來隨機初始化參數和樣本

上面兩步是模型初始化,接下來是模型訓練。首先是正向計算Z和Y。

這裡面用到了隱藏層的sigmoid和輸出層的softmax兩個激活函數。定義如下。

接下來我們實現反向傳遞來更新參數的函數。為了便於與上一篇公式推導中的形式對應,我首先寫了四個參數的for循環寫法。由於這種寫法速度很慢,其後我又寫了三種速度更快的形式。

首先是W2,即隱藏層到輸出層的V。

接著是b2,即隱藏層到輸出層的b。b可以直接由W的函數變化過來。

然後是W1,即輸入層到隱藏層的W。

隨後是b1,即輸入層到隱藏層的b。

最後我們來實現三種速度更快的寫法。基本思路少用循環,多用矩陣乘法,工具是基礎的線性代數。在這裡以W2為例,由上到下速度變快。

對於整個流程,我們還需要計計算cost和正確率的函數。定義如下:

萬事俱備,現在我們將整個建模流程寫進一個函數中。其中參數eta是反向傳遞的學習率,epi是訓練次數。

這裡放一個我跑的例子。

輸出如下。

The cost is : 0.3265428804999796 . The classification rate is : 0.3333333333333333 .The cost is : 0.5030679473418662 . The classification rate is : 0.3333333333333333 .The cost is : 0.5008099421421485 . The classification rate is : 0.6446666666666667 .The cost is : 0.5003610855164803 . The classification rate is : 0.6666666666666666 .The cost is : 0.5001991955365086 . The classification rate is : 0.6666666666666666 .

補充一點,因為我對eta的理解不深,文中eta的設置就選擇了一個比較常用的值;我試過其他不同的值,有些是單純地訓練效果差,有的甚至會報溢出的錯誤。

以上就是用Python實現一個簡單的單隱層bp神經網路的全部內容,歡迎大家批評指正。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python解決FlowJo軟體識別LMD文件出現的問題
花旗銀行將Python納入分析師培訓體系

TAG:Python |