田凌燕
(重慶工商大學(xué)派斯學(xué)院,重慶 401520)
在諸多神經(jīng)網(wǎng)絡(luò)模型中,卷積神經(jīng)網(wǎng)絡(luò)作為一種多層非線性結(jié)構(gòu)模型,有著強(qiáng)大的特征表達(dá)能力以及對(duì)復(fù)雜函數(shù)的建模能力,在現(xiàn)今如圖像處理、語音處理等領(lǐng)域中得到了廣泛運(yùn)用[1]。因此,對(duì)基于Python的卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行分析研究,將有著極為重要的現(xiàn)實(shí)意義。
卷積神經(jīng)網(wǎng)絡(luò)是一類包涵卷積計(jì)算且具有深度結(jié)果的前饋神經(jīng)網(wǎng)絡(luò),是當(dāng)今機(jī)器深度學(xué)習(xí)領(lǐng)域中的而代表算法之一。在實(shí)際運(yùn)用過程中,卷積神經(jīng)網(wǎng)絡(luò)將表現(xiàn)出良好的能力,即能夠按照階層結(jié)果對(duì)所有輸入信息進(jìn)行平移不變分類,因此,卷積神經(jīng)網(wǎng)絡(luò)又被稱之為平移不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)[2]。
卷積神經(jīng)網(wǎng)絡(luò)作為當(dāng)今神經(jīng)網(wǎng)絡(luò)的一種,同樣具備神經(jīng)網(wǎng)絡(luò)的一定特點(diǎn)。例如神經(jīng)網(wǎng)絡(luò)通常是由多個(gè)神經(jīng)元(感知器)所構(gòu)成全連接網(wǎng)絡(luò),在整個(gè)全連接網(wǎng)絡(luò)中,每個(gè)神經(jīng)元都可以與一個(gè)非線性函數(shù)共同構(gòu)建激活函數(shù),該激活函數(shù)具有擬合非線性,其與前一層之間的層次便是卷積神經(jīng)網(wǎng)絡(luò)中的全連接層[3]。
卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,C1和C2代表著卷積層、S1和S2代表著池化層,剩余的兩層則是代表著全連接層和輸出層,如圖1所示??芍?,每(n-m+1)×(x-m+1)個(gè)卷積神經(jīng)網(wǎng)絡(luò)都會(huì)擁有不止一個(gè)卷積層、池化層以及全連接層,但卻只有一個(gè)輸出層,在實(shí)際訓(xùn)練過程中,相鄰層的神經(jīng)元之間可以實(shí)現(xiàn)權(quán)值共享。
圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
在訓(xùn)練過程中,卷積神經(jīng)網(wǎng)絡(luò)主要會(huì)經(jīng)歷3個(gè)流程,即卷積、池化以及全連接。根據(jù)實(shí)際訓(xùn)練所需,整個(gè)卷積神經(jīng)網(wǎng)絡(luò)將會(huì)進(jìn)行前向傳播和反向傳播[4]。在前向傳播過程中,假定輸入了N×N大小的矩陣,并且每個(gè)矩陣的卷積核為ω,卷積核大小為m×m,由此可以推導(dǎo)出卷積層的實(shí)際輸出大小為:
進(jìn)而可以推導(dǎo)出卷積層的輸入為:
在池化層中,假定池化層的區(qū)域?yàn)椋╧×s),結(jié)合上文所推導(dǎo)出的卷積層實(shí)際輸出大小,便可以推導(dǎo)出池化層的實(shí)際大小為:
在反向傳播過程中,卷積神經(jīng)網(wǎng)絡(luò)的權(quán)值計(jì)算公式如下:
假設(shè)n為卷積神經(jīng)網(wǎng)絡(luò)的實(shí)際層數(shù),為L(zhǎng)1為輸入層,而L2—Ln-1為卷積神經(jīng)網(wǎng)絡(luò)的隱含層,Ln為輸出層。那么LNl便可以視作為卷積神經(jīng)網(wǎng)絡(luò)中第l層的神經(jīng)元數(shù)量;則是卷積神經(jīng)網(wǎng)絡(luò)第l-1層的卷積核,則是卷積神經(jīng)網(wǎng)絡(luò)第l層的第i個(gè)神經(jīng)單元的偏置;至于卷積神經(jīng)網(wǎng)絡(luò)的第l層的第i個(gè)神經(jīng)元輸入則由表示;卷積層的輸入層為則表示輸入值,那么卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算過程可以推導(dǎo)為:
由此可知,卷積神經(jīng)網(wǎng)絡(luò)的實(shí)際算法如下:
Input:訓(xùn)練集X={X1,X2,...,XN},n
Output:net={LN1,LN2,...,LNn},參數(shù)及結(jié)果
參數(shù)初始化
For i=1,......, epochs
Forward backpropagation
Backward backpropagation
End For
最終輸出最優(yōu)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及其參數(shù)結(jié)果。
(1)準(zhǔn)備階段:采集人臉圖像,用于后續(xù)的人臉識(shí)別卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練。(2)圖片信息代碼化:將原本的人臉圖像轉(zhuǎn)化為二進(jìn)制代碼信息,方便計(jì)算機(jī)進(jìn)行識(shí)別和處理。(3)定義函數(shù):定義圖片處理訓(xùn)練過程中所使用的諸多函數(shù)。(4)生成采樣集:自行生成池化采樣集,完成池化采樣活動(dòng)。(5)定義卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):合理定義選擇卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。(6)訓(xùn)練樣本集:優(yōu)化訓(xùn)練集圖片,并完成對(duì)樣本集的訓(xùn)練。(7)人臉識(shí)別:利用系統(tǒng)對(duì)人臉進(jìn)行識(shí)別測(cè)試。
2.2.1 圖片信息代碼化
假定人臉圖片的實(shí)際像素大小為x×y,將圖片的屬性信息進(jìn)行輸入,并根據(jù)圖片的屬性得到圖像的實(shí)際像素大小[5]。假定其最多包含有6個(gè)字母,那么在將字母進(jìn)行數(shù)字化表示的時(shí)候,便需要將字母轉(zhuǎn)化為計(jì)算機(jī)能夠識(shí)別的二進(jìn)制代碼,如為a:10000000000000000000000000;b:01000000000000000000000000……等,以此類推,便可以將所有字母轉(zhuǎn)化為二進(jìn)制代表。
2.2.2 定義函數(shù)
首先,在文本訓(xùn)練集中提出圖片所對(duì)應(yīng)的函數(shù);其次,對(duì)圖片所對(duì)應(yīng)的函數(shù)進(jìn)行預(yù)處理,主要是將訓(xùn)練集圖片進(jìn)行重命名;最后,卷積神經(jīng)網(wǎng)絡(luò)模型將會(huì)以矩陣的形式返回圖片。為能夠有效提高卷積神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練效果,需要將圖片名稱定義為向量函數(shù),之后再定義一個(gè)向量函數(shù),將圖片名稱所轉(zhuǎn)化為的向量函數(shù)還原為圖片名稱。
2.2.3 生成采樣集
先通過上文定義的函數(shù),圖片的名稱將會(huì)轉(zhuǎn)化為向量函數(shù),后再定義出一個(gè)get_name_and_image()函數(shù)獲取圖片,通過此函數(shù),圖片將會(huì)被以含布爾值的矩陣形式進(jìn)行返回,之后通過1×(image.flatten())將圖片所返回的矩陣轉(zhuǎn)換成為一行x×y列的矩陣,在該矩陣中,將不會(huì)蘊(yùn)含其他參數(shù),所有內(nèi)容均將會(huì)以0和1的二進(jìn)制形式進(jìn)行體現(xiàn);最后,卷積神經(jīng)網(wǎng)絡(luò)模型將會(huì)自行生成池化采樣集,完成池化采樣活動(dòng)。
2.2.4 定義卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
對(duì)于卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的定義,針對(duì)不同的機(jī)器學(xué)習(xí)內(nèi)容,其所需要定義選擇的方案也不盡相同。文章所需要進(jìn)行的及其學(xué)習(xí)內(nèi)容為圖片,所以在綜合考慮以后,最終選擇了“3+1”的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)形式,即3個(gè)卷積層加上一個(gè)全連接層來定義卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)。另外,文章定位原始圖片在全連接層中,還會(huì)經(jīng)過3層池化層,使其實(shí)際像素大小被壓縮23倍,即原x×y像素的圖片將會(huì)被壓縮成為(x/8)×(y/8)大小的訓(xùn)練集圖片。
2.2.5 訓(xùn)練樣本集
在完成結(jié)構(gòu)設(shè)計(jì)以后,便可以對(duì)人臉圖片所轉(zhuǎn)化成分的訓(xùn)練集進(jìn)行實(shí)際樣本集訓(xùn)練了。首先,通過交叉熵函數(shù)(Cross Entropy)sigmoid_cross_entropy_with_ logits()來直接比較訓(xùn)練樣本集中Loss值的實(shí)際大小,并在比較過程中,使用adam優(yōu)化器來對(duì)訓(xùn)練樣本集進(jìn)行全面優(yōu)化,提高樣本集訓(xùn)練效果。其次,在樣本集訓(xùn)練過程中,需要確保每一步loss值都要經(jīng)過輸出的過程,在訓(xùn)練過程中,每100步的訓(xùn)練準(zhǔn)確率也要被輸出。
2.2.6 人臉識(shí)別
在完成上述工作以后,便可以打開攝像頭,調(diào)用攝像頭自行捕捉人臉圖像,在捕捉到人臉圖像后,系統(tǒng)將會(huì)自行對(duì)人臉圖像進(jìn)行拍攝,并通過上述的樣本訓(xùn)練過程進(jìn)行實(shí)際圖片訓(xùn)練工作,測(cè)試卷積神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建效果。
相比較其他類型的人臉識(shí)別方式來說,基于Python的人臉識(shí)別卷積神經(jīng)網(wǎng)絡(luò)模型具有學(xué)習(xí)能力,所以識(shí)別精準(zhǔn)度將會(huì)隨著識(shí)別人臉的數(shù)量增多而提升。不過,無論如何完善和學(xué)習(xí),當(dāng)今的計(jì)算機(jī)也無法達(dá)成100%的識(shí)別精準(zhǔn)性,為此,還需要對(duì)卷積神經(jīng)網(wǎng)絡(luò)模型實(shí)行進(jìn)一步完善。