王志強,王先傳
(1.阜陽工業經濟學校,安徽阜陽 236015;2.阜陽師范大學,安徽阜陽 236041)
目前深度學習應用較為廣泛[1-2],其是對人類大腦中的神經網絡進行模擬,從而實現對于輸入數據(圖像、文本等)的處理。因此,隨著深度學習的不斷發展以及所需處理的數據量的增大,可以看出在進行圖像分類及目標識別的應用中,深度學習的應用至關重要,非線性網絡變得更加有利,可以從輸入數據中得到更多有利信息[3-4]。針對這個情況提出ResNet網絡,在網絡結構中引入快捷方式使輸入同時引入至輸出,最終學習輸出與輸入之間的差值,構成殘差結構,使得每一次僅用學習殘差的部分,成功解決退化問題,使ResNet網絡的應用比較廣泛。
ResNet網絡[5-6]是在之前的VGG網絡結構基礎上添加快捷方式,這樣每次學習的便僅僅是殘差的部分。即每個ResNet網絡都由許多殘差塊堆積而成,其中每一個殘差塊都由一個神經網絡模型和一個快捷方式構成。一個殘差塊的結構如圖1所示。

圖1 殘差塊的結構示意圖Fig.1 Structure diagram of residual block
第t層殘差塊的輸出為

其中,x為網絡的輸入,ft(·)代表第t層的卷積層,gt(x)代表t-1層的最終輸出。
Boosting的工作流程大致為:對初始提供的數據集進行訓練,得到一個學習器。根據學習器的結果表現,相應地對數據進行處理,即對于做錯的數據,改變它相應的權重,使得其在后續的訓練中得到更多的關注。Boosting的工作機制如圖2所示。

圖2 Boosting的工作機制Fig.2 Working mechanism of Boosting
在ResNet網絡每一層的輸出處引入一個線性的全連接層,將得到的結果通過全連接層引出來[7],此時相當于將提取好的特征拿出來,在后續的網絡中便不再對已經分類好的數據進行處理。即在每一層中將分類效果很好的類別先提取出來,隨后將剩下的再次進行訓練測試,直到達到較好的結果,這樣的好處在于使得訓練的時間變短、結構簡單,在后續的網絡中所要訓練提取的特征變少,準確率得到提升。
已知的ResNet網絡共有5種結構,分別為ResNet18、ResNet34、ResNet50、ResNet101、ResNet152。其都有自己的網絡構架,大體上都是統一的,只是在具體的層中有所不同。
利用Boosting的思想可以對網絡結構進行改進,具體構建方法為[8]:在conv_1、conv_2、conv_3、conv_4四個層的輸出處分別引入一個線性的全連接層,利用Python中的nn.linear()函數實現,得到4個全連接層結果為y1、y2、y3、y4。在引入四個全連接層時,需要利用a.reshape()函數先對結果進行處理,改變所得結果的矩陣形狀,使之與全連接層的參數保持匹配,隨后得到全連接層的結果,如圖3所示。

圖3 基于Boosting的圖像分類算法設計結構圖Fig.3 Design structure chart of image classification algorithm based on Boosting
2.3.1 Loss的訓練方法及變化
網絡的Loss即在定義了損失函數Criterion之后,計算網絡輸出與真實標簽之間的誤差,從而得到損失值Loss。在研究中希望Loss越小越好,故在得到Loss后,需要進行反向傳播,改變相應的參數,使得網絡的Loss不斷減小,直到達到標準或是完成所有的訓練次數。本文使用pytorch完成實驗驗證,則通過Loss.backward()函數完成誤差的反向傳播,pytorch的內在機制可以實現自動求導得到每個參數的梯度。故在實現網絡結構的重新構建后,對網絡進行訓練時,根據Loss需要作出相應的改變。
2.3.2 預測值的變化
在設計分類網絡訓練及測試過程中,預測值不再采用原來的網絡輸出Outputs的最大值,而是應用Boosting的思想,需要采用網絡的最終輸出Outputs以及每一個引出的全連接層的輸出y1,y2,y3,y4的和,并通過torch.max()函數得到Outputs+y1+y2+y3+y4的最大值,以此作為網絡的預測值。
Cifar10數據集[9-10]包含10大類,共有60000張彩色圖像。在Cifar數據集的官網上,提供3種形式的數據集,一種供python程序使用,一種供Matlab程序使用,還有一種供C程序使用。本文采用的是python程序,則選擇python版本的數據集,下載解壓后得到的數據集存在5個批次的訓練數據集和1個批次的測試數據集。每一個批次都是用python中的cpickle庫打包好的形式,此時每個批處理文件都包含一個字典。在進行程序運行時,可直接進行調用。
與Cifar10相比,Cifar100數據集中的圖像共分為100類。每一類包含600張圖像,其中500張作為訓練圖像,100張作為測試圖像。故Cifar100共有50000張訓練圖像,10000張測試圖像,與Cifar10相同,只是圖像的種類變多了。
Cifar100數據集首先被分為20個超類,即比較籠統的分類,隨后每個超類下精細地分為5個小類。這樣數據集中所有圖像都具有一個“粗糙的”標簽和一個“精細的”標簽。
對基礎網絡的改進方式為[11-12]:在每一個層的輸出處引入一個線性的全連接層,每一個鏈接層的結果都可以看做與一個弱分類器對應,最終將所有的弱分類器進行結合,得到最終的輸出。
實驗結果如圖4,每訓練一個epoch便進行一次測試,得到實時準確率。

圖4 Cifar10-ResNet-Boosting的最終輸出結果Fig.4 The final output of Cifar10-ResNet-Boosting
將所有準確率用折線圖表示,結果如圖5所示。

圖5 Cifar10-ResNet-Boosting網絡的準確率Fig.5 The accuracy of Cifar10-ResNet-Boosting network
由圖5可以清楚地看出,隨著遍歷數據集次數的增加,準確率先上升,隨后不再明顯上升,而是在90%的附近波動,如表1所示。

表1 Cifar10數據集下的結果對比Tab.1 Comparison of results in Cifar10 data set
由此看出,設計的網絡對分類準確率的提升沒有較大的作用,故提出出現這種現象的原因是否由于進行實驗的數據集太小,僅僅擁有10類,如若改變數據集,增大數據的類別,是否對準確率有所提升,則進行下一組對比實驗進行論證。
在進行了上述的對比實驗后,可以看出設計的網絡對于圖片分類的準確率沒有較大的提升,與原來的網絡沒有較大的差異,則提出設置如下:改變數據集,再次進行對比實驗,觀察是否對準確率有所提升。
部分參數設置如下:
(1)Epoch=135,即程序將對輸入的數據遍歷135次。
(2)Batch_Size=125,即每次輸入125張圖片。由于Cifar100數據集有50000張訓練圖片,故遍歷一次輸入,輸出400次Loss及Acc。但相對于Cifar10而言,其數據類別增多。
(3)LR=0.001,減小學習率,有助于觀察更加細微的變化。數據集仍為Cifar100,網絡仍為ResNet網絡,未做任何改變。同樣的每訓練一個Epoch便進行一次測試,得到實時準確率。
則最終結果如圖6所示,在進行了135次訓練及測試后,最后一次網絡的分類準確率為67%。

圖6 Cifar100-ResNet網絡的最終輸出結果Fig.6 The final output of Cifar100-ResNet network
將所有實驗結果通過折線圖表示,結果如圖7所示。
由圖7可知,隨著遍歷數據集次數的增加,準確率先上升在某一處便不再明顯上升,最終準確率的值在66%附近波動。

圖7 Cifar100-ResNet網絡的準確率Fig.7 The accuracy of Cifar100-ResNet network
實驗結果如表2所示,通過設計的網絡對Cifar100數據集訓練及測試的結果,總共遍歷數據集135次,準確率先上升,最后在70%附近波動。

表2 Cifar100數據集下的結果對比Tab.2 Comparison of results in Cifar100 data set
均采用數據集Cifar100,同樣遍歷數據集135次,學習率均為0.001,Batch_Size=125,在相同的參數情況下,僅僅是網絡的不同,進行實驗驗證,以此探尋所設計的網絡對準確率的提升是否有效果。
經過實驗論證可以看出,在ResNet網絡下,最終的準確率平衡在66%左右,而設計的網絡準確率最終穩定在70%左右,Loss均逐漸減小。由此可以看出設計的網絡對準確率的提升是有效果的,盡管提升不是很多。
由此印證了3.2小節的對比實驗可能由于數據集類別過少,導致準確率沒有任何提升效果,在更大的數據上分類準確率有了提升,雖然提升不是非常明顯。
通過理論設想及實驗證明可知,對ResNet網絡結構進行改變,在每一層的輸出處引入一個線性的全連接層,將每一個全連接層的結果看做對應于一個弱分類器,在訓練網絡的過程中,分別計算其與標簽之間的Loss,最終的Loss是將得到的Loss進行相加。并且每訓練一個Epoth便測試一下準確率。實驗中設置的Epoth為135,可以看到通過不斷的訓練和測試,最終的準確率在不斷上升。與此同時存在的不足是:在每一層的輸出引入一個線性的全連接層,最后利用Boosting的思想時,僅僅是將所有結果進行簡單的求和,考慮不是很全面,應該考慮更多的可能來實現基于Boosting的思想對ResNet網絡結構的改變,得到更好的對ResNet網絡訓練的方法。同時在Cifar10的數據集上準確率基本上沒有較大的變化,但在Cifar100數據集上有所提升,應該再對更多類別的數據集進行實驗,觀察是否會有更加明顯的提升。