目錄
一、常規神經網絡模型
二、TensorFlow實現前向傳播步驟
1、讀取數據集
2、batch劃分
3、根據神經網絡每一層的神經元個數來初始化參數w,b
4、進行每一層輸入輸出的計算
5、對每一層的輸出進行非線性relu函數變換
6、計算一個batch訓練后的誤差loss
7、計算每一次loss對參數的梯度
8、根據梯度進行參數的迭代
三、常見錯誤糾錯
1、tf.Variable()忘記使用——將需要求導的參數進行該操作,系統會自動記錄導數的變化
2、迭代后的參數會自動變成tensor,而不是variable進而報錯
3、梯度爆炸的解決——將初始化參數時的方差改小
4、幾個循環
一、常規神經網絡模型
二、TensorFlow實現前向傳播步驟
這里以UCI中的手寫數字集作為數據訓練集,假設神經網絡層數有4層
輸入層:1
隱層:2
輸出層:1
按照batch的方式進行訓練,一個batch含有128組數據
一個batch在神經網絡中訓練的shape變換如下:
x【128,28,28】>>>reshape>>>輸入:【128,784】>>>隱層1:【128,256】>>>隱層2:【128,128】>>>輸出:out【128,10】
y【128,】>>>one_hot>>>【128,10】
一個batch的loss:【128,10】
loss = (y-out)^2
1、讀取數據集
?
?
2、batch劃分
因為minis數據集數據量龐大,如果一個一個樣本進行訓練會非常耗時,因此將一定數量的樣本組合成一個batch,每次對一個batch進行訓練,這樣會提高訓練效率,又不會影響訓練出來神經網絡的準確性
3、根據神經網絡每一層的神經元個數來初始化參數w,b
每一層的w的個數為:上一層神經元數*下一層神經元數
每一層的b的個數為:當前層的神經元個數
4、進行每一層輸入輸出的計算
5、對每一層的輸出進行非線性relu函數變換
6、計算一個batch訓練后的誤差loss
7、計算每一次loss對參數的梯度
利用TensorFlow求解loss對各個參數進行求導時,必須將輸入輸出的求解以及loss的求解放在上圖紅色框的內部
8、根據梯度進行參數的迭代
三、常見錯誤糾錯
1、tf.Variable()忘記使用——將需要求導的參數進行該操作,系統會自動記錄導數的變化
2、迭代后的參數會自動變成tensor,而不是variable進而報錯
這樣的話我們就需要利用一個函數,使得迭代變量參數的值發生改變但是對象不會發生改變
?
3、梯度爆炸的解決——將初始化參數時的方差改小
梯度爆炸就是指梯度突然非常大,導致后面進行后向傳播時,loss不斷地增大,得不到最優參數解
?
?
?