王志強(qiáng),王先傳
(1.阜陽(yáng)工業(yè)經(jīng)濟(jì)學(xué)校,安徽阜陽(yáng) 236015;2.阜陽(yáng)師范大學(xué),安徽阜陽(yáng) 236041)
目前深度學(xué)習(xí)應(yīng)用較為廣泛[1-2],其是對(duì)人類大腦中的神經(jīng)網(wǎng)絡(luò)進(jìn)行模擬,從而實(shí)現(xiàn)對(duì)于輸入數(shù)據(jù)(圖像、文本等)的處理。因此,隨著深度學(xué)習(xí)的不斷發(fā)展以及所需處理的數(shù)據(jù)量的增大,可以看出在進(jìn)行圖像分類及目標(biāo)識(shí)別的應(yīng)用中,深度學(xué)習(xí)的應(yīng)用至關(guān)重要,非線性網(wǎng)絡(luò)變得更加有利,可以從輸入數(shù)據(jù)中得到更多有利信息[3-4]。針對(duì)這個(gè)情況提出ResNet網(wǎng)絡(luò),在網(wǎng)絡(luò)結(jié)構(gòu)中引入快捷方式使輸入同時(shí)引入至輸出,最終學(xué)習(xí)輸出與輸入之間的差值,構(gòu)成殘差結(jié)構(gòu),使得每一次僅用學(xué)習(xí)殘差的部分,成功解決退化問題,使ResNet網(wǎng)絡(luò)的應(yīng)用比較廣泛。
ResNet網(wǎng)絡(luò)[5-6]是在之前的VGG網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上添加快捷方式,這樣每次學(xué)習(xí)的便僅僅是殘差的部分。即每個(gè)ResNet網(wǎng)絡(luò)都由許多殘差塊堆積而成,其中每一個(gè)殘差塊都由一個(gè)神經(jīng)網(wǎng)絡(luò)模型和一個(gè)快捷方式構(gòu)成。一個(gè)殘差塊的結(jié)構(gòu)如圖1所示。
圖1 殘差塊的結(jié)構(gòu)示意圖Fig.1 Structure diagram of residual block
第t層殘差塊的輸出為
其中,x為網(wǎng)絡(luò)的輸入,ft(·)代表第t層的卷積層,gt(x)代表t-1層的最終輸出。
Boosting的工作流程大致為:對(duì)初始提供的數(shù)據(jù)集進(jìn)行訓(xùn)練,得到一個(gè)學(xué)習(xí)器。根據(jù)學(xué)習(xí)器的結(jié)果表現(xiàn),相應(yīng)地對(duì)數(shù)據(jù)進(jìn)行處理,即對(duì)于做錯(cuò)的數(shù)據(jù),改變它相應(yīng)的權(quán)重,使得其在后續(xù)的訓(xùn)練中得到更多的關(guān)注。Boosting的工作機(jī)制如圖2所示。
圖2 Boosting的工作機(jī)制Fig.2 Working mechanism of Boosting
在ResNet網(wǎng)絡(luò)每一層的輸出處引入一個(gè)線性的全連接層,將得到的結(jié)果通過全連接層引出來[7],此時(shí)相當(dāng)于將提取好的特征拿出來,在后續(xù)的網(wǎng)絡(luò)中便不再對(duì)已經(jīng)分類好的數(shù)據(jù)進(jìn)行處理。即在每一層中將分類效果很好的類別先提取出來,隨后將剩下的再次進(jìn)行訓(xùn)練測(cè)試,直到達(dá)到較好的結(jié)果,這樣的好處在于使得訓(xùn)練的時(shí)間變短、結(jié)構(gòu)簡(jiǎn)單,在后續(xù)的網(wǎng)絡(luò)中所要訓(xùn)練提取的特征變少,準(zhǔn)確率得到提升。
已知的ResNet網(wǎng)絡(luò)共有5種結(jié)構(gòu),分別為ResNet18、ResNet34、ResNet50、ResNet101、ResNet152。其都有自己的網(wǎng)絡(luò)構(gòu)架,大體上都是統(tǒng)一的,只是在具體的層中有所不同。
利用Boosting的思想可以對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改進(jìn),具體構(gòu)建方法為[8]:在conv_1、conv_2、conv_3、conv_4四個(gè)層的輸出處分別引入一個(gè)線性的全連接層,利用Python中的nn.linear()函數(shù)實(shí)現(xiàn),得到4個(gè)全連接層結(jié)果為y1、y2、y3、y4。在引入四個(gè)全連接層時(shí),需要利用a.reshape()函數(shù)先對(duì)結(jié)果進(jìn)行處理,改變所得結(jié)果的矩陣形狀,使之與全連接層的參數(shù)保持匹配,隨后得到全連接層的結(jié)果,如圖3所示。
圖3 基于Boosting的圖像分類算法設(shè)計(jì)結(jié)構(gòu)圖Fig.3 Design structure chart of image classification algorithm based on Boosting
2.3.1 Loss的訓(xùn)練方法及變化
網(wǎng)絡(luò)的Loss即在定義了損失函數(shù)Criterion之后,計(jì)算網(wǎng)絡(luò)輸出與真實(shí)標(biāo)簽之間的誤差,從而得到損失值Loss。在研究中希望Loss越小越好,故在得到Loss后,需要進(jìn)行反向傳播,改變相應(yīng)的參數(shù),使得網(wǎng)絡(luò)的Loss不斷減小,直到達(dá)到標(biāo)準(zhǔn)或是完成所有的訓(xùn)練次數(shù)。本文使用pytorch完成實(shí)驗(yàn)驗(yàn)證,則通過Loss.backward()函數(shù)完成誤差的反向傳播,pytorch的內(nèi)在機(jī)制可以實(shí)現(xiàn)自動(dòng)求導(dǎo)得到每個(gè)參數(shù)的梯度。故在實(shí)現(xiàn)網(wǎng)絡(luò)結(jié)構(gòu)的重新構(gòu)建后,對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí),根據(jù)Loss需要作出相應(yīng)的改變。
2.3.2 預(yù)測(cè)值的變化
在設(shè)計(jì)分類網(wǎng)絡(luò)訓(xùn)練及測(cè)試過程中,預(yù)測(cè)值不再采用原來的網(wǎng)絡(luò)輸出Outputs的最大值,而是應(yīng)用Boosting的思想,需要采用網(wǎng)絡(luò)的最終輸出Outputs以及每一個(gè)引出的全連接層的輸出y1,y2,y3,y4的和,并通過torch.max()函數(shù)得到Outputs+y1+y2+y3+y4的最大值,以此作為網(wǎng)絡(luò)的預(yù)測(cè)值。
Cifar10數(shù)據(jù)集[9-10]包含10大類,共有60000張彩色圖像。在Cifar數(shù)據(jù)集的官網(wǎng)上,提供3種形式的數(shù)據(jù)集,一種供python程序使用,一種供Matlab程序使用,還有一種供C程序使用。本文采用的是python程序,則選擇python版本的數(shù)據(jù)集,下載解壓后得到的數(shù)據(jù)集存在5個(gè)批次的訓(xùn)練數(shù)據(jù)集和1個(gè)批次的測(cè)試數(shù)據(jù)集。每一個(gè)批次都是用python中的cpickle庫(kù)打包好的形式,此時(shí)每個(gè)批處理文件都包含一個(gè)字典。在進(jìn)行程序運(yùn)行時(shí),可直接進(jìn)行調(diào)用。
與Cifar10相比,Cifar100數(shù)據(jù)集中的圖像共分為100類。每一類包含600張圖像,其中500張作為訓(xùn)練圖像,100張作為測(cè)試圖像。故Cifar100共有50000張訓(xùn)練圖像,10000張測(cè)試圖像,與Cifar10相同,只是圖像的種類變多了。
Cifar100數(shù)據(jù)集首先被分為20個(gè)超類,即比較籠統(tǒng)的分類,隨后每個(gè)超類下精細(xì)地分為5個(gè)小類。這樣數(shù)據(jù)集中所有圖像都具有一個(gè)“粗糙的”標(biāo)簽和一個(gè)“精細(xì)的”標(biāo)簽。
對(duì)基礎(chǔ)網(wǎng)絡(luò)的改進(jìn)方式為[11-12]:在每一個(gè)層的輸出處引入一個(gè)線性的全連接層,每一個(gè)鏈接層的結(jié)果都可以看做與一個(gè)弱分類器對(duì)應(yīng),最終將所有的弱分類器進(jìn)行結(jié)合,得到最終的輸出。
實(shí)驗(yàn)結(jié)果如圖4,每訓(xùn)練一個(gè)epoch便進(jìn)行一次測(cè)試,得到實(shí)時(shí)準(zhǔn)確率。
圖4 Cifar10-ResNet-Boosting的最終輸出結(jié)果Fig.4 The final output of Cifar10-ResNet-Boosting
將所有準(zhǔn)確率用折線圖表示,結(jié)果如圖5所示。
圖5 Cifar10-ResNet-Boosting網(wǎng)絡(luò)的準(zhǔn)確率Fig.5 The accuracy of Cifar10-ResNet-Boosting network
由圖5可以清楚地看出,隨著遍歷數(shù)據(jù)集次數(shù)的增加,準(zhǔn)確率先上升,隨后不再明顯上升,而是在90%的附近波動(dòng),如表1所示。
表1 Cifar10數(shù)據(jù)集下的結(jié)果對(duì)比Tab.1 Comparison of results in Cifar10 data set
由此看出,設(shè)計(jì)的網(wǎng)絡(luò)對(duì)分類準(zhǔn)確率的提升沒有較大的作用,故提出出現(xiàn)這種現(xiàn)象的原因是否由于進(jìn)行實(shí)驗(yàn)的數(shù)據(jù)集太小,僅僅擁有10類,如若改變數(shù)據(jù)集,增大數(shù)據(jù)的類別,是否對(duì)準(zhǔn)確率有所提升,則進(jìn)行下一組對(duì)比實(shí)驗(yàn)進(jìn)行論證。
在進(jìn)行了上述的對(duì)比實(shí)驗(yàn)后,可以看出設(shè)計(jì)的網(wǎng)絡(luò)對(duì)于圖片分類的準(zhǔn)確率沒有較大的提升,與原來的網(wǎng)絡(luò)沒有較大的差異,則提出設(shè)置如下:改變數(shù)據(jù)集,再次進(jìn)行對(duì)比實(shí)驗(yàn),觀察是否對(duì)準(zhǔn)確率有所提升。
部分參數(shù)設(shè)置如下:
(1)Epoch=135,即程序?qū)?duì)輸入的數(shù)據(jù)遍歷135次。
(2)Batch_Size=125,即每次輸入125張圖片。由于Cifar100數(shù)據(jù)集有50000張訓(xùn)練圖片,故遍歷一次輸入,輸出400次Loss及Acc。但相對(duì)于Cifar10而言,其數(shù)據(jù)類別增多。
(3)LR=0.001,減小學(xué)習(xí)率,有助于觀察更加細(xì)微的變化。數(shù)據(jù)集仍為Cifar100,網(wǎng)絡(luò)仍為ResNet網(wǎng)絡(luò),未做任何改變。同樣的每訓(xùn)練一個(gè)Epoch便進(jìn)行一次測(cè)試,得到實(shí)時(shí)準(zhǔn)確率。
則最終結(jié)果如圖6所示,在進(jìn)行了135次訓(xùn)練及測(cè)試后,最后一次網(wǎng)絡(luò)的分類準(zhǔn)確率為67%。
圖6 Cifar100-ResNet網(wǎng)絡(luò)的最終輸出結(jié)果Fig.6 The final output of Cifar100-ResNet network
將所有實(shí)驗(yàn)結(jié)果通過折線圖表示,結(jié)果如圖7所示。
由圖7可知,隨著遍歷數(shù)據(jù)集次數(shù)的增加,準(zhǔn)確率先上升在某一處便不再明顯上升,最終準(zhǔn)確率的值在66%附近波動(dòng)。
圖7 Cifar100-ResNet網(wǎng)絡(luò)的準(zhǔn)確率Fig.7 The accuracy of Cifar100-ResNet network
實(shí)驗(yàn)結(jié)果如表2所示,通過設(shè)計(jì)的網(wǎng)絡(luò)對(duì)Cifar100數(shù)據(jù)集訓(xùn)練及測(cè)試的結(jié)果,總共遍歷數(shù)據(jù)集135次,準(zhǔn)確率先上升,最后在70%附近波動(dòng)。
表2 Cifar100數(shù)據(jù)集下的結(jié)果對(duì)比Tab.2 Comparison of results in Cifar100 data set
均采用數(shù)據(jù)集Cifar100,同樣遍歷數(shù)據(jù)集135次,學(xué)習(xí)率均為0.001,Batch_Size=125,在相同的參數(shù)情況下,僅僅是網(wǎng)絡(luò)的不同,進(jìn)行實(shí)驗(yàn)驗(yàn)證,以此探尋所設(shè)計(jì)的網(wǎng)絡(luò)對(duì)準(zhǔn)確率的提升是否有效果。
經(jīng)過實(shí)驗(yàn)論證可以看出,在ResNet網(wǎng)絡(luò)下,最終的準(zhǔn)確率平衡在66%左右,而設(shè)計(jì)的網(wǎng)絡(luò)準(zhǔn)確率最終穩(wěn)定在70%左右,Loss均逐漸減小。由此可以看出設(shè)計(jì)的網(wǎng)絡(luò)對(duì)準(zhǔn)確率的提升是有效果的,盡管提升不是很多。
由此印證了3.2小節(jié)的對(duì)比實(shí)驗(yàn)可能由于數(shù)據(jù)集類別過少,導(dǎo)致準(zhǔn)確率沒有任何提升效果,在更大的數(shù)據(jù)上分類準(zhǔn)確率有了提升,雖然提升不是非常明顯。
通過理論設(shè)想及實(shí)驗(yàn)證明可知,對(duì)ResNet網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改變,在每一層的輸出處引入一個(gè)線性的全連接層,將每一個(gè)全連接層的結(jié)果看做對(duì)應(yīng)于一個(gè)弱分類器,在訓(xùn)練網(wǎng)絡(luò)的過程中,分別計(jì)算其與標(biāo)簽之間的Loss,最終的Loss是將得到的Loss進(jìn)行相加。并且每訓(xùn)練一個(gè)Epoth便測(cè)試一下準(zhǔn)確率。實(shí)驗(yàn)中設(shè)置的Epoth為135,可以看到通過不斷的訓(xùn)練和測(cè)試,最終的準(zhǔn)確率在不斷上升。與此同時(shí)存在的不足是:在每一層的輸出引入一個(gè)線性的全連接層,最后利用Boosting的思想時(shí),僅僅是將所有結(jié)果進(jìn)行簡(jiǎn)單的求和,考慮不是很全面,應(yīng)該考慮更多的可能來實(shí)現(xiàn)基于Boosting的思想對(duì)ResNet網(wǎng)絡(luò)結(jié)構(gòu)的改變,得到更好的對(duì)ResNet網(wǎng)絡(luò)訓(xùn)練的方法。同時(shí)在Cifar10的數(shù)據(jù)集上準(zhǔn)確率基本上沒有較大的變化,但在Cifar100數(shù)據(jù)集上有所提升,應(yīng)該再對(duì)更多類別的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),觀察是否會(huì)有更加明顯的提升。