1. 構建資料集
2. 初始化4個變數
- 確定樣本個數
- 輸入層神經元的個數 (樣本的特徵個數)
- 隱藏層神經元的個數
- 輸出層神經元的個數
3. 網路引數w和b的初始化其中,神經網路的層數(除輸入層)決定初始化引數w和b的對數。(此處以2層為例);
各引數的shape總結如下:
注意:初始化賦值時,b 一般全部初始化為 0 即可,但是 w 不能全部初始化為 0,初始化的方法是使用numpy.random.randn()方法隨機生成。
4. 正向傳播 (fp)
正向傳播的過程分為線性部分和非線性部分,其目的是求神經網路模型的**值y。線性部分結果表示為z[1],z[2],非線性部分結果表示為a[1],a[2];非線性也可理解為啟用函式(af),常見的啟用函式有4種:
- sigmoid 函式
- tanh 函式
- relu 函式
- leaky relu 函式
注意:常用的啟用函式選擇方法是:隱藏層選擇tanh函式,輸出層選擇sigmoid 函式;
5. 損失函式
通過正向傳播來計算損失函式,其目的是求解真實的y值與**的y值的差距;首先得確定損失函式的選擇,常見的損失函式有以下三種:
- hinge loss(支援向量機損失函式)
- softmax(互熵損失函式)
- cross entropy(交叉熵損失函式)
根據選擇的損失函式計算最終的損失值,損失值越小模型越好。即下一步需要對損失函式最優化,使得損失值最小。
6. 反向傳播 (bp)
通過鏈式法則對損失函式求一階偏導,再代入具體值求d(w1),d(b1),d(w2),d(b2)。
7. 根據梯度下降法對網路引數進行更新
根據反向傳播的結果更新w1,b1, w2, b2。由梯度下降法更新的具體公式如下所示:
w1 = w1 - n * d(w1)
b1 = b1 - n * d(b1)
w2 = w2 - n * d(w2)
b2 = b2 - n * d(b2)
其中,n稱學習率(學習因子),計算前應適當地給n乙個值。
8. 迴圈迭代
從步驟4開始迴圈迭代,直到損失函式達到最小或者迭代次數達到上限。
神經網路學習(十)淺層BP神經網路總結
系列部落格是博主學習神經網路中相關的筆記和一些個人理解,僅為作者記錄筆記之用,不免有很多細節不對之處。我的這一階段目標是在學習完淺層bp神經網路的相關知識時,可以將手寫字的識別率達到98 在前面的幾次實驗中,mnist手寫字的識別率始終未達到98 以上,這樣的結果是有些讓人沮喪的。今天進過艱苦奮鬥,...
淺層神經網路 2
搭建乙個神經網路時,你可以選擇隱藏層中或者輸出層中使用什麼啟用函式 actuation function 到目前為止,我們一直使用的是sigmoid函式,但其他函式效果會更好。在實際訓練中,有個函式表現總是比sigmoid好,叫tanh 雙曲正切函式 它的輸出是 1,1 從數學上,它其實是sigmo...
搭建神經網路模型
簡單例子 先說模型搭建,後面發布模型訓練,最後模型 分類 in channel 輸入彩色為3 out channel 卷積核個數 一般與層數相同 kernel size 卷積核大小 stride 1 padding 0 self.conv1 nn.conv2d 3,6,5 16個卷積核,大小尺寸為 ...