自己動手製作人工神經網路0x1:初始化部分

船頭尺發表於2021-09-09

說在前面

從這裡開始,我假定你們已經知道ANN是啥玩意。

目標

首先,明確我們的目標。我們將構建一個具有一個隱藏層的ANN。
所有層之間的關係都是全連線,並且使用sigmoid作為啟用函式。
隱含層 h=sigmoid(i*wih+bih)
輸出層 o=sigmoid(h*who+bho)

圖片描述

一個輸入,隱藏,輸出層節點數都為3的網路


Coding

P1:初始化

首先,匯入所需的庫。我們需要numpy幫助完成矩陣運算。也需要scipy庫簡化實現啟用函式的程式碼量。

import numpy as npimport scipy.special

然後建立一個類,方便操作,類名就叫ANN吧

class ANN:
    """
    Artificial Neural Networks
    """
    pass

接著給ANN類,我們的神經網路編寫初始化函式。
初始化的引數有輸入層節點個數(inputNodes),隱藏層節點個數(hiddenNodes),輸出層節點個數(outputNodes),還有學習速率(learningRate)
在初始化函式里,順便建立兩個矩陣(wio, who)。np.random.normal()會返回一個已經按正態分佈初始化的矩陣,第一個引數為分佈中心,第二個引數為標準方差,第三個引數是陣列大小。
最後設定啟用函式(a_f(x))為scipy.special.expit(x),expit()就是sigmoid函式,他可以使我們節點的輸出更絲滑。

    def __init__(self, inputNodes, hiddenNodes, outputNodes, learningRate):

        self.iN = inputNodes
        self.hN = hiddenNodes
        self.oN = outputNodes
        self.lr = learningRate

        self.wih = np.random.normal(0.0, pow(self.hN, -0.5), (self.hN, self.iN))
        self.who = np.random.normal(0.0, pow(self.oN, -0.5), (self.oN, self.hN))

        self.a_f = lambda x: scipy.special.expit(x)

這樣,便完成了初始化的部分,為接下來的工作打下基礎。



作者:御史神風
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2811945/,如需轉載,請註明出處,否則將追究法律責任。

相關文章