TensorFlow反向傳播演算法實現

2022-02-03 06:03:40 字數 2031 閱讀 9809

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 資料集(

現在開始使用反向傳播演算法:

匯入模組:

載入資料集,通過設定 one_hot=true 來使用獨熱編碼標籤:

定義超引數和其他常量。這裡,每個手寫數字的尺寸是 28×28=784 畫素。資料集被分為

10 類,以 0 到 9 之間的數字表示。這兩點是固定的。學習率、最大迭代週期數、每次批量訓練的批量大小以及隱藏層中的神經元數量都是超引數。可以通過調整這些超引數,看看是如何影響網路表現的:

需要 sigmoid 函式的導數來進行權重更新,所以定義:

為訓練資料建立佔位符:

建立模型:

定義權重和偏置變數:

為正向傳播、誤差、梯度和更新計算建立計算圖:

定義計算精度 accuracy 的操作:

初始化變數:

執行圖:

結果如下:

解讀分析

在這裡,訓練網路時的批量大小為 10,如果增加批量的值,網路效能就會下降。另外,需要在測試資料集上檢測訓練好的網路的精度,這裡測試資料集的大小是 1000。

單隱藏層多層感知機在訓練資料集上的準確率為 84.45,在測試資料集上的準確率為 92.1。這是好的,但不夠好。mnist 資料集被用作機器學習中分類問題的基準。接下來,看一下如何使用 tensorflow 的內建優化器影響網路效能。

tensorflow實戰 反向傳播

windows10 anaconda3 64位 batch size 8 每次訓練的資料量 seed 23455 隨機種子 rng np.random.randomstate seed x rng.rand 32,2 產生32行2列的隨機矩陣 y int x0 x1 1 for x0,x1 in x...

TensorFlow教程(十) 反向傳播

tensorflow通過宣告優化函式 optimization function 來實現,一旦宣告好優化函式,tensorflow將通過它在計算圖中解決反向傳播的項。當傳入資料,最小化損失函式,tensorflow會在計算圖中根據狀態相應的調節變數。coding utf 8 import tenso...

TensorFlow實現反向傳播演算法

反向傳播 bpn 演算法是神經網路中研究最多 使用最多的演算法之一,它用於將輸出層中的誤差傳播到隱藏層的神經元,然後用於更新權重。學習 bpn 演算法可以分成以下兩個過程 正向傳播 輸入被饋送到網路,訊號從輸入層通過隱藏層傳播到輸出層。在輸出層,計算誤差和損失函式。反向傳播 在反向傳播中,首先計算輸...