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