深度學習基礎課:用全連接層識別手寫數(shù)字(上)
大家好~我開設了“深度學習基礎班”的線上課程,帶領同學從0開始學習全連接和卷積神經(jīng)網(wǎng)絡,進行數(shù)學推導,并且實現(xiàn)可以運行的Demo程序
線上課程資料:
本節(jié)課錄像回放
加QQ群,獲得ppt等資料,與群主交流討論:106047770
本系列文章為線上課程的復盤,每上完一節(jié)課就會同步發(fā)布對應的文章
本文為第五節(jié)課:“用全連接層識別手寫數(shù)字(上)”的復盤文章
本課程系列文章可進入索引查看:
深度學習基礎課系列文章索引
目錄
為什么要學習本課
- 如何用全連接層識別下面的手寫數(shù)字?

回顧相關(guān)課程內(nèi)容
- 第三節(jié)課:全連接層的前向和后向傳播推導
- 全連接層的網(wǎng)絡結(jié)構(gòu)是什么?
- 如何實現(xiàn)前向傳播?
- 如何實現(xiàn)后向傳播?
- 如何實現(xiàn)訓練?
- 如何使用全連接層實現(xiàn)“判斷性別Demo”?
主問題:輸入是什么?
- 輸入層的輸入數(shù)據(jù)是什么?
答:手寫數(shù)字圖片的像素的亮度值 - 如何處理輸入數(shù)據(jù)?
- 把整個手寫數(shù)字圖片作為輸入數(shù)據(jù)會有什么問題?
答:
輸出不確定;
單個樣本的像素太多,造成輸入層神經(jīng)元過多,訓練不容易收斂;
變化太多了(每個數(shù)字一變,整個樣本就變了),訓練不容易收斂; - 如何解決該問題?
答:拆分成每個數(shù)字一張圖片:

- 把整個手寫數(shù)字圖片作為輸入數(shù)據(jù)會有什么問題?
主問題:輸出是什么?
- 需要的輸出數(shù)據(jù)是什么?
答:一個數(shù)字,范圍為0-9 - 如何設計輸出層的輸出數(shù)據(jù)?
答:輸出層輸出10個數(shù)字,數(shù)字的范圍為[0.0,1.0] - 如何確定輸出的是哪個數(shù)字?
答:最大的數(shù)字的序號,即為輸出的數(shù)字
主問題:網(wǎng)絡結(jié)構(gòu)是什么?
- 已知每個數(shù)字圖片的像素數(shù)量為28*28=784,那么輸入層節(jié)點數(shù)(神經(jīng)元的個數(shù))是多少?
答:784 - 輸出層節(jié)點數(shù)是多少?
答:10 - 我們使用1層隱藏層
- 隱藏層節(jié)點數(shù)是多少?
答:下圖為一些估計公式,我們使用第一個公式來估計,取30

主問題:如何判斷訓練是否收斂?
- 我們之前是如何判斷的?
答:判斷l(xiāng)oss是否接近0 - 現(xiàn)在還行得通嗎?
- 損失函數(shù)需要改變嗎?

答:需要 - 如何改變?
答:改變后的損失函數(shù)公式為: \( e=\frac{1}{n}\sum_{i=1}^n (\left\vert \overrightarrow{y_{真實}} - \overrightarrow{y_{輸出}} \right\vert)^2 \)
- 損失函數(shù)需要改變嗎?
- 除了判斷誤差的方法,還有其它的方法來判斷是否收斂嗎?
答:判斷正確率
任務:實現(xiàn)訓練
- 什么是訓練集,什么是測試集?
答:參考機器學習筆記:訓練集、驗證集和測試集區(qū)別 - 介紹mnist數(shù)據(jù)集
- 請參考LinearLayerGradientCheck_answer,實現(xiàn)訓練的代碼
答:待實現(xiàn)的代碼:ImplementTrain
實現(xiàn)后的代碼:ImplementTrain_answer - 請每個同學都運行“訓練數(shù)據(jù)集”的代碼,檢查訓練是否收斂?
答:沒有收斂,正確率一直卡在10%上不去
浙公網(wǎng)安備 33010602011771號