TensorFlow深度學習實戰---MNIST數字識別問題
1.滑動平均模型:
用途:用於控制變量的更新幅度,使得模型在訓練初期參數更新較快,在接近最優值處參數更新較慢,幅度較小
方式:主要通過不斷更新衰減率來控制變量的更新幅度。
衰減率計算公式 :
decay = min{init_decay , (1 + num_update) / (10 + num_update)}
其中 init_decay 為設置的初始衰減率 ,num_update 為模型參數更新次數,由此可見,隨著 num_update 更新次數的增加,(1 + num_update) / (10 + num_update 這一項的計算結果越接近1
參數更新公式:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
其中 shadow_variable 為變量更新前的數值,variable為變量更新後的數值
例如:
x = 0
x = 1
此時 shadow_variable 就是 0 , variable 就是 1 , 假如此時的 衰減率 decay 是 0.5,則更新後的 x 取值為 0.5 * 0 + (1 - 0.5) * 1 = 0.5
通過以上公式可以發現,隨著模型叠代次數的增加,(1 + num_update) / (10 + num_update) 這一項的計算結果越接近1,也就是 (1 - decay) * variable 更接近於 0 ,此時模型參數變化幅度減小 , 也就是 shadow_variable == decay * shadow_variable 等式越成立。
2.
使用驗證數據集判斷模型效果:雖然一個神經網絡模型的效果最終是通過測試數據來評判的,但不能直接通過模型在測試數據上的效果來選擇參數。
使用測試數據來選擇參數可能會導致神經網絡模型過度你和測試數據,從而失去對未知數據的預判能力。
因此一般會從訓練數據中抽取一部分作為驗證是數據。
交叉驗證(cross validation):在海量數據下,花費時間比較長,一般會更多地采用驗證數據集的形式來評測模型的效果。
3.在神經網絡結構的設計上: 1)使用激活函數 2)多層隱藏層
在神經網絡優化上:1)使用指數衰減的學習率 2)加入正則化的損失函數 2)滑動平均模型
4.通過MNIST數據集有效地驗證了激活函數、隱藏層可以給模型的效果帶來質的飛躍。此外,由於MNIST問題本身相對簡單,滑動平均模型、指數衰減的學習率和正則化損失對最終正確率的提升效果不明顯。
5.變量管理:
TensorFlow深度學習實戰---MNIST數字識別問題