TensorFlow反向传播算法实现
TensorFlow反向傳播算法實現
反向傳播(BPN)算法是神經網絡中研究最多、使用最多的算法之一,用于將輸出層中的誤差傳播到隱藏層的神經元,然后用于更新權重。
學習 BPN 算法可以分成以下兩個過程:
- 正向傳播:輸入被饋送到網絡,信號從輸入層通過隱藏層傳播到輸出層。在輸出層,計算誤差和損失函數。
- 反向傳播:在反向傳播中,首先計算輸出層神經元損失函數的梯度,然后計算隱藏層神經元損失函數的梯度。接下來用梯度更新權重。
這兩個過程重復迭代直到收斂。
前期準備
首先給網絡提供 M 個訓練對(X,Y),X 為輸入,Y 為期望的輸出。輸入通過激活函數 g(h) 和隱藏層傳播到輸出層。輸出 Yhat 是網絡的輸出,得到 error=Y-Yhat。其損失函數 J(W) 如下:
其中,i 取遍所有輸出層的神經元(1 到 N)。然后可以使用 J(W) 的梯度并使用鏈式法則求導,來計算連接第 i 個輸出層神經元到第 j 個隱藏層神經元的權重 Wij 的變化:
這里,Oj 是隱藏層神經元的輸出,h 表示隱藏層的輸入值。這很容易理解,但現在怎么更新連接第 n 個隱藏層的神經元 k 到第 n+1 個隱藏層的神經元 j 的權值 Wjk?過程是相同的:將使用損失函數的梯度和鏈式法則求導,但這次計算 Wjk:
現在已經有方程了,看看如何在 TensorFlow 中做到這一點。在這里,還是使用 MNIST 數據集(http://yann.lecun.com/exdb/MNIST/)。
具體實現過程
現在開始使用反向傳播算法:
-
導入模塊:
-
加載數據集,通過設置 one_hot=True 來使用獨熱編碼標簽:
-
定義超參數和其他常量。這里,每個手寫數字的尺寸是 28×28=784 像素。數據集被分為 10 類,以 0 到 9 之間的數字表示。這兩點是固定的。學習率、最大迭代周期數、每次批量訓練的批量大小以及隱藏層中的神經元數量都是超參數。可以通過調整這些超參數,看看是如何影響網絡表現的:
-
需要 Sigmoid 函數的導數來進行權重更新,所以定義:
-
為訓練數據創建占位符:
-
創建模型:
-
定義權重和偏置變量:
-
為正向傳播、誤差、梯度和更新計算創建計算圖:
-
定義計算精度 accuracy 的操作:
-
初始化變量:
-
執行圖:
-
結果如下:
解讀分析
在這里,訓練網絡時的批量大小為 10,如果增加批量的值,網絡性能就會下降。另外,需要在測試數據集上檢測訓練好的網絡的精度,這里測試數據集的大小是 1000。
單隱藏層多層感知機在訓練數據集上的準確率為 84.45,在測試數據集上的準確率為 92.1。這是好的,但不夠好。MNIST 數據集被用作機器學習中分類問題的基準。接下來,看一下如何使用 TensorFlow 的內置優化器影響網絡性能。
總結
以上是生活随笔為你收集整理的TensorFlow反向传播算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow单层感知机实现
- 下一篇: TensorFlow实现多层感知机MIN