Python神經網絡代碼識別手寫字具體流程(二):矩陣的前向傳播

在上一篇神經網絡代碼實現流程中,加載數據返回了三組數據:訓練集,測試集,驗證集.加載數據後,需要對神經網絡代碼的類進行實例化。
以下講解,神經網絡代碼類的實現:
在類中,首先,在Network類的構造函數中,由實例化時傳入的參數定義了神經網絡的層數,每層的神經元個數,並利用隨機函數對每層的神經元權重以及偏置進行初始化。

 def __init__(self, sizes):
        self.num_layers = len(sizes)  #神經網絡的層數,循環的時候會應用到
        self.sizes = sizes   #傳入的神經網絡的列表
        self.biases = [np.random.randn(y, 1) for y in sizes[1:]]  #生成的偏置的矩陣,形成到爲一個列表,列表中的每一項都是一個矩陣。矩陣的維度與y相同
        self.weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1], sizes[1:])] #形成的權重的列表,(如果輸入層爲第0層的話,列表中的第i個矩陣的維度爲:(第i層的神經元個數)*(i—1層神經元個數))。其中,隨機化生成的矩陣符合標準正態分佈。

在構造函數中,相當於形成了神經網絡的骨架,在實例化神經網絡的類時,傳入的參數是神經網絡的結構,所以所有的權重,偏置,神經元都已經被定義好了。在上一節中,數據已經被加載成了標準的格式,到現在,我們可以把訓練集輸入進去,得到了一個輸出的矩陣,當然,這個輸出的矩陣並沒有什麼用。但是理解這個矩陣卻能夠理解前向傳導的含義。
前向傳播網絡代碼如下:

def feedforward(self, a):
    for b, w in zip(self.biases, self.weights):
        a = sigmoid(np.dot(w, a)+b)
    return a

在以上的代碼中,a爲輸入,在上一節中我們知道輸入爲(784*50000),經過以上的循環:經過第一個隱藏層,輸出的a爲(30*50000),在經過第二個隱藏層,得到的a爲(10*50000)。當然,我們肯定不會這樣使用神經網絡將所有的數據一次向傳入進去,只是用此說明一下前向網絡的流程。

發佈了50 篇原創文章 · 獲贊 36 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章