【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)
目錄
一、常規(guī)神經(jīng)網(wǎng)絡(luò)模型
二、TensorFlow實現(xiàn)前向傳播步驟
1、讀取數(shù)據(jù)集
2、batch劃分
3、根據(jù)神經(jīng)網(wǎng)絡(luò)每一層的神經(jīng)元個數(shù)來初始化參數(shù)w,b
4、進行每一層輸入輸出的計算
5、對每一層的輸出進行非線性relu函數(shù)變換
6、計算一個batch訓練后的誤差loss
7、計算每一次loss對參數(shù)的梯度
8、根據(jù)梯度進行參數(shù)的迭代
三、常見錯誤糾錯
1、tf.Variable()忘記使用——將需要求導的參數(shù)進行該操作,系統(tǒng)會自動記錄導數(shù)的變化
2、迭代后的參數(shù)會自動變成tensor,而不是variable進而報錯
3、梯度爆炸的解決——將初始化參數(shù)時的方差改小
4、幾個循環(huán)
一、常規(guī)神經(jīng)網(wǎng)絡(luò)模型
二、TensorFlow實現(xiàn)前向傳播步驟
這里以UCI中的手寫數(shù)字集作為數(shù)據(jù)訓練集,假設(shè)神經(jīng)網(wǎng)絡(luò)層數(shù)有4層
輸入層:1
隱層:2
輸出層:1
按照batch的方式進行訓練,一個batch含有128組數(shù)據(jù)
一個batch在神經(jīng)網(wǎng)絡(luò)中訓練的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、讀取數(shù)據(jù)集
?
?
2、batch劃分
因為minis數(shù)據(jù)集數(shù)據(jù)量龐大,如果一個一個樣本進行訓練會非常耗時,因此將一定數(shù)量的樣本組合成一個batch,每次對一個batch進行訓練,這樣會提高訓練效率,又不會影響訓練出來神經(jīng)網(wǎng)絡(luò)的準確性
3、根據(jù)神經(jīng)網(wǎng)絡(luò)每一層的神經(jīng)元個數(shù)來初始化參數(shù)w,b
每一層的w的個數(shù)為:上一層神經(jīng)元數(shù)*下一層神經(jīng)元數(shù)
每一層的b的個數(shù)為:當前層的神經(jīng)元個數(shù)
4、進行每一層輸入輸出的計算
5、對每一層的輸出進行非線性relu函數(shù)變換
6、計算一個batch訓練后的誤差loss
7、計算每一次loss對參數(shù)的梯度
利用TensorFlow求解loss對各個參數(shù)進行求導時,必須將輸入輸出的求解以及l(fā)oss的求解放在上圖紅色框的內(nèi)部
8、根據(jù)梯度進行參數(shù)的迭代
三、常見錯誤糾錯
1、tf.Variable()忘記使用——將需要求導的參數(shù)進行該操作,系統(tǒng)會自動記錄導數(shù)的變化
2、迭代后的參數(shù)會自動變成tensor,而不是variable進而報錯
這樣的話我們就需要利用一個函數(shù),使得迭代變量參數(shù)的值發(fā)生改變但是對象不會發(fā)生改變
?
3、梯度爆炸的解決——將初始化參數(shù)時的方差改小
梯度爆炸就是指梯度突然非常大,導致后面進行后向傳播時,loss不斷地增大,得不到最優(yōu)參數(shù)解
?
?
?
4、幾個循環(huán)
總結(jié)
以上是生活随笔為你收集整理的【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据分析面试】大厂高频SQL笔试题(二
- 下一篇: 深度学习简介(一)——卷积神经网络