從零到python機(jī)器學(xué)習(xí)大神的7個(gè)步驟
卷積神經(jīng)網(wǎng)絡(luò)(CNN)的基礎(chǔ)介紹見 ,這里主要以代碼實(shí)現(xiàn)為主。
CNN是一個(gè)多層的神經(jīng)網(wǎng)絡(luò),每層由多個(gè)二維平面組成,而每個(gè)平面由多個(gè)獨(dú)立神經(jīng)元組成。
以MNIST作為數(shù)據(jù)庫,仿照LeNet-5和TIny-cnn( ) 設(shè)計(jì)一個(gè)簡(jiǎn)單的7層CNN結(jié)構(gòu)如下:
輸入層Input:神經(jīng)元數(shù)量32*32=1024;
C1層:卷積窗大小5*5,輸出特征圖數(shù)量6,卷積窗種類6,輸出特征圖大小28*28,可訓(xùn)練參數(shù)(權(quán)值+閾值(偏置))5*5*6+6=150+6,神經(jīng)元數(shù)量28*28*6=4704;
S2層:卷積窗大小2*2,輸出下采樣圖數(shù)量6,卷積窗種類6,輸出下采樣圖大小14*14,可訓(xùn)練參數(shù)1*6+6=6+6,神經(jīng)元數(shù)量14*14*6=1176;
C3層:卷積窗大小5*5,輸出特征圖數(shù)量16,卷積窗種類6*16=96,輸出特征圖大小10*10,可訓(xùn)練參數(shù)5*5*(6*16)+16=2400+16,神經(jīng)元數(shù)量10*10*16=1600;
S4層:卷積窗大小2*2,輸出下采樣圖數(shù)量16,卷積窗種類16,輸出下采樣圖大小5*5,可訓(xùn)練參數(shù)1*16+16=16+16,神經(jīng)元數(shù)量5*5*16=400;
C5層:卷積窗大小5*5,輸出特征圖數(shù)量120,卷積窗種類16*120=1920,輸出特征圖大小1*1,可訓(xùn)練參數(shù)5*5*(16*120)+120=48000+120,神經(jīng)元數(shù)量1*1*120=120;
輸出層Output:卷積窗大小1*1,輸出特征圖數(shù)量10,卷積窗種類120*10=1200,輸出特征圖大小1*1,可訓(xùn)練參數(shù)1*(120*10)+10=1200+10,神經(jīng)元數(shù)量1*1*10=10。
下面對(duì)實(shí)現(xiàn)執(zhí)行過程進(jìn)行描述說明:
1. 從MNIST數(shù)據(jù)庫中分別獲取訓(xùn)練樣本和測(cè)試樣本數(shù)據(jù):
(1)、原有MNIST庫中圖像大小為28*28,這里縮放為32*32,數(shù)據(jù)值范圍為[-1,1],擴(kuò)充值均取-1;總共60000個(gè)32*32訓(xùn)練樣本,10000個(gè)32*32測(cè)試樣本;
(2)、輸出層有10個(gè)輸出節(jié)點(diǎn),在訓(xùn)練階段,對(duì)應(yīng)位置的節(jié)點(diǎn)值設(shè)為0.8,其它節(jié)點(diǎn)設(shè)為-0.8.
2. 初始化權(quán)值和閾值(偏置):權(quán)值就是卷積圖像,每一個(gè)特征圖上的神經(jīng)元共享相同的權(quán)值和閾值,特征圖的數(shù)量等于閾值的個(gè)數(shù)
(1)、權(quán)值采用uniform rand的方法初始化;
(2)、閾值均初始化為0.
3. 前向傳播:根據(jù)權(quán)值和閾值,主要計(jì)算每層神經(jīng)元的值
(1)、輸入層:每次輸入一個(gè)32*32數(shù)據(jù)。
(2)、C1層:分別用每一個(gè)5*5的卷積圖像去乘以32*32的圖像,獲得一個(gè)28*28的圖像,即對(duì)應(yīng)位置相加再求和,stride長度為1;一共6個(gè)5*5的卷積圖像,然后對(duì)每一個(gè)神經(jīng)元加上一個(gè)閾值,最后再通過tanh激活函數(shù)對(duì)每一神經(jīng)元進(jìn)行運(yùn)算得到最終每一個(gè)神經(jīng)元的結(jié)果。
(3)、S2層:對(duì)C1中6個(gè)28*28的特征圖生成6個(gè)14*14的下采樣圖,相鄰四個(gè)神經(jīng)元分別進(jìn)行相加求和,然后乘以一個(gè)權(quán)值,再求均值即除以4,然后再加上一個(gè)閾值,最后再通過tanh激活函數(shù)對(duì)每一神經(jīng)元進(jìn)行運(yùn)算得到最終每一個(gè)神經(jīng)元的結(jié)果。
(4)、C3層:由S2中的6個(gè)14*14下采樣圖生成16個(gè)10*10特征圖,對(duì)于生成的每一個(gè)10*10的特征圖,是由6個(gè)5*5的卷積圖像去乘以6個(gè)14*14的下采樣圖,然后對(duì)應(yīng)位置相加求和,然后對(duì)每一個(gè)神經(jīng)元加上一個(gè)閾值,最后再通過tanh激活函數(shù)對(duì)每一神經(jīng)元進(jìn)行運(yùn)算得到最終每一個(gè)神經(jīng)元的結(jié)果。
(5)、S4層:由C3中16個(gè)10*10的特征圖生成16個(gè)5*5下采樣圖,相鄰四個(gè)神經(jīng)元分別進(jìn)行相加求和,然后乘以一個(gè)權(quán)值,再求均值即除以4,然后再加上一個(gè)閾值,最后再通過tanh激活函數(shù)對(duì)每一神經(jīng)元進(jìn)行運(yùn)算得到最終每一個(gè)神經(jīng)元的結(jié)果。
(6)、C5層:由S4中16個(gè)5*5下采樣圖生成120個(gè)1*1特征圖,對(duì)于生成的每一個(gè)1*1的特征圖,是由16個(gè)5*5的卷積圖像去乘以16個(gè)5*5的下采用圖,然后相加求和,然后對(duì)每一個(gè)神經(jīng)元加上一個(gè)閾值,最后再通過tanh激活函數(shù)對(duì)每一神經(jīng)元進(jìn)行運(yùn)算得到最終每一個(gè)神經(jīng)元的結(jié)果。
(7)、輸出層:即全連接層,輸出層中的每一個(gè)神經(jīng)元均是由C5層中的120個(gè)神經(jīng)元乘以相對(duì)應(yīng)的權(quán)值,然后相加求和;然后對(duì)每一個(gè)神經(jīng)元加上一個(gè)閾值,最后再通過tanh激活函數(shù)對(duì)每一神經(jīng)元進(jìn)行運(yùn)算得到最終每一個(gè)神經(jīng)元的結(jié)果。
4. 反向傳播:主要計(jì)算每層神經(jīng)元、權(quán)值和閾值的誤差,以用來更新權(quán)值和閾值
(1)、輸出層:計(jì)算輸出層神經(jīng)元誤差;通過mse損失函數(shù)的導(dǎo)數(shù)函數(shù)和tanh激活函數(shù)的導(dǎo)數(shù)函數(shù)來計(jì)算輸出層神經(jīng)元誤差。
(2)、C5層:計(jì)算C5層神經(jīng)元誤差、輸出層權(quán)值誤差、輸出層閾值誤差;通過輸出層神經(jīng)元誤差乘以輸出層權(quán)值,求和,結(jié)果再乘以C5層神經(jīng)元的tanh激活函數(shù)的導(dǎo)數(shù),獲得C5層每一個(gè)神經(jīng)元誤差;通過輸出層神經(jīng)元誤差乘以C5層神經(jīng)元獲得輸出層權(quán)值誤差;輸出層誤差即為輸出層閾值誤差。