深度學習是近十年來人工智慧領域取得的重要突破。它在語音識別、自然語言處理、計算機視覺、圖像與視頻分析、多媒體等諸多領域的應用取得了巨大成功。至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。
圖1 2011-2019年「卷積神經網絡」百度搜索指數變化趨勢
其中較為火熱的圖像分類技術已經被廣泛應用在人臉識別和面部表情識別中,是計算機視覺的核心問題之一。圖像分類是從固定的一組分類中分配輸入圖像一個標籤的任務,在本案例中,我們將以Fashion-MNIST圖像數據集為例,了解並使用不同的神經網絡模型來對其進行分類,並比較不同網絡的預測效果。
本案例的學習分為三個部分,首先是目標問題的數據集介紹,了解數據背景是解決問題的重要前提;接著,我們會介紹基本的邏輯回歸模型,在此基礎上引入本案例的核心——卷積神經網絡。在第三部分中,我們將會介紹若干種比較流行的卷積神經網絡,分別從這些網絡的結構和預測效果來對不同的模型進行比較。
01說到圖像識別,想必大家對MNIST-Image手寫數據集都不陌生。這個數據包含60000個示例的訓練集以及10000個示例的測試集。由於它的數據量小、識別任務簡單而成為圖像識別入門的第一課。但是由於其計算量小,識別難度較低(很多深度學習算法在這個測試集上的準確率已經達到99.6%),能在該數據集上有較好表現的模型並不一定能用在更複雜的圖片識別中。深度學習框架Keras的創建者François Chollet在Twitter上說道:「在MNIST上看似有效的想法沒法遷移到真正的機器視覺問題上。」
圖2 MNIST數據集示例
圖像來源:https://i2.wp.com/sefiks.com/wp-content/uploads/2017/09/mnist.png?resize=289%2C289&ssl=1
因此,產生了一個替代MNIST手寫數字集的圖像數據集:Fashion-MNIST,其涵蓋了來自10種類別的共7萬個不同商品的正面圖片,由Zalando(一家德國的時尚科技公司)旗下的研究部門提供。Fashion-MNIST的圖像大小、格式和訓練集/測試集劃分與原始的MNIST完全一致:60000/10000的訓練測試數據劃分,28x28的灰度圖片。
圖3 Fashion-MNIST數據集
圖片來源:http://kexue.fm/usr/uploads/2017/08/1865825983.png
該數據集的樣本均衡,每個類別6000個樣本;分類目標也清晰直觀,即將7萬張不同的圖片劃分為10種類別。每一類的圖像大致特徵如下:
圖4 全部的10個類別和每個類別的第1張圖
02首先,為了使得後續的建模較為清晰明了,我們在所有的模型建立之前進行以下準備工作:
導入深度學習框架tensorflow、keras、python 模塊 scikit-learn(簡稱sklearn)等;
實現輔助函數,本案例接下來將會多次使用卷積核權重參數的可視化和CNN訓練結果的可視化,因此提前定義相應函數。
提到分類問題,我們首先想到的應該是邏輯回歸,邏輯回歸能對圖像分類嗎?答案是當然可以。那邏輯回歸和神經網絡有什麼關係呢?實際上,我們可以將邏輯回歸看作僅含有一個神經元的單層(全連接層)神經網絡:
圖5 紅框部分表示二值邏輯回歸,相當於神經網絡中的一個神經元
當二分類問題擴展為多分類問題時,常用的是Softmax邏輯回歸。首先,我們了解一下什麼是Softmax函數。Softmax函數,或稱歸一化指數函數,是邏輯函數的一種推廣,它能將一個含任意實數的K維向量
「壓縮」到另一個K維實向量
中,使得每一個元素的範圍都在(0,1)之間,並且所有元素的和為1,函數形式為:
多分類模型的輸出結果為該樣本屬於K個類別的概率,從這K個概率中我們選擇最優的概率對應的類別(通常選概率最大的類別),作為該樣本的預測類別。根據廣義線性模型的假設
,所給模型在給定x的條件下y的分布
,通過最大化似然函數來求解最優參數,計算K個概率進行分類。
Softmax回歸是多維的邏輯回歸,它其實可以看作單層(全連接層)多個神經元的神經網絡:
圖6 多值邏輯回歸相當於含有一層網絡+多個神經元的神經網絡
我們對Fashion-MNIST數據集進行最基本的Softmax回歸,自變量在「拉直」後為28*28=784維的像素點向量,因變量為10個類別。Softmax回歸的預測結果在85%左右,這實際上是一個比較高的準確率。接著我們將全連接層的權重參數值轉換為28*28的矩陣並繪製矩陣熱圖,從該層的權重矩陣可以看出一些輪廓。
圖7 Softmax回歸全連接層權重參數矩陣
觀察Softmax邏輯回歸的混淆矩陣,可以看出第6類服裝的錯誤率最高,而誤判為第6類的主要為第0、2、4類。我們觀察這幾類圖片,發現它們長得確實很像,因此邏輯回歸的錯判也是可以理解的。
預測類別
圖8 邏輯回歸混淆矩陣(縱軸為真實類別)
03在了解卷積神經網絡之前,我們先簡單了解最基本的神經網絡。神經網絡其實就是按照一定規則連接起來的多個神經元,輸入向量的維度和輸入層(Input Layer)神經元個數相同,分類問題的類別個數決定了輸出層(Output Layer)的神經元個數。第N層的神經元與第N-1層的所有神經元連接,稱為全連接。輸入層和輸出層之間的層叫做隱藏層(Hidden Layer),因為它們對於外部來說是不可見的,層與層的每條連接上都有一個權值。
圖9 3層神經網絡(Input層不算入內)
然而,用全連接神經網絡處理大尺寸圖像具有三個明顯的缺點:
(1)首先,將圖像展開為向量會丟失臨近像素的空間信息;
(2)其次,模型參數過多,因此效率低下,訓練困難;
(3)同時,大量的參數也很快會導致網絡過擬合。
針對這些問題,人們提出了卷積神經網絡,從而很好地解決了上面的三個問題。
與常規神經網絡不同,卷積神經網絡的各層中的神經元是3維排列的:寬度、高度和深度(這個深度指的是某層數據的第三個維度,而不是整個網絡的深度,整個網絡的深度指的是網絡的層數)。下圖是一個卷積神經網絡,它的神經元被排列在3個維度(寬、高和深度)。卷積神經網絡的每一層都將3維的輸入數據變化為神經元3維的激活數據並輸出。在下圖中,紅色的輸入層代表輸入圖像,所以它的寬度和高度就是圖像的寬度和高度,它的深度是3(代表了RGB 3種顏色通道)。圖中紅色右邊的藍色部分是經過卷積運算(convolution)和池化運算(Pooling)之後的激活值(也可以看作一層神經元) ,後面是接著的下一部分卷積池化層,最右邊綠色的部分是一個深度為分類個數的輸出向量。
圖10 卷積神經網絡簡化結構
卷積神經網絡主要由這幾類層構成:輸入層、卷積層(Convolution),激活函數(Activation,CNN中一般使用ReLU函數)、池化(Pooling)層和全連接層(Fully Connected Layer,全連接層相當於一個普通神經網絡)。通過將這些層疊加起來,就可以構建一個完整的卷積神經網絡。因為卷積後面一般會跟著ReLU,因此在很多示意圖中常常將ReLU忽略。
具體說來,卷積層和全連接層(CONV/FC)對輸入執行變換操作的時候,不僅會用到激活函數,還會用到很多參數,即神經元之間連接的權值矩陣W和偏差b;而激活函數和池化層則是進行一個固定不變的函數操作。卷積層和全連接層中的參數會通過梯度下降被訓練,這樣卷積神經網絡計算出的分類評分就能和訓練集中的每個圖像的標籤逐漸相符了。
1. 卷積層與卷積計算卷積層是構建卷積神經網絡的核心層,它佔據了網絡中大部分的計算。在處理圖像這樣的高維度輸入時,讓每個神經元都與前一層中的所有神經元進行全連接是不現實的。相反,我們讓每個神經元只與輸入數據的一個局部區域連接,這個過程是離散卷積運算。
離散卷積運算(Discrete Convolution)是一種對輸入數據的線性變換,這種運算具有稀疏的性質(每個輸出單元的產生只包含了一部分輸入單元信息),並且重複利用參數(對輸入數據的多個位置使用同一組權值參數)
圖11 離散卷積計算示例
如上圖所示,整個淺藍色5*5矩陣被稱作輸入特徵圖(Input Feature Map),陰影覆蓋的深藍色部分為3*3的卷積核(Kernel,也叫做濾波器Filter),取值為:
卷積核滑過輸入特徵圖,滑動到每一個位置時,卷積核中的每個元素與其覆蓋的陰影部分輸入數據對應位置的每個元素做乘積再求和,得到表示當前位置的輸出數據(對應右邊綠色陰影部分的數字),在全部滑動位置都計算完成後,就得到了綠色的輸出矩陣,也叫做輸出特徵圖(Output Feature Map)。我們以3*3的輸入數據X、2*2的卷積核W和2*2的輸出矩陣Y為例,通過公式來表示卷積運算:
將卷積核擴展為4*9的稀疏矩陣C:
並將X拉直為9*1的矩陣,則為4*1矩陣,再將
重塑(Reshape)為2*2的大小即為輸出矩陣Y。
當我們使用不同的卷積核重複上述卷積運算,則可以得到同樣多的輸出特徵圖,也稱為輸出通道(Output Channels)。如果有多個輸入通道(Input Channels)——以圖片具有RGB 3個輸入通道為例,對每一個輸入通道(即每一個輸入特徵圖)使用一個特定的卷積核進行如上的卷積計算,輸出3個特徵圖,將這3個輸出特徵圖對應位置的元素相加,計算出這一個輸入通道對應的輸出特徵圖。卷積核的數量與輸出特徵圖的數量相同,每個輸出特徵圖表示一個輸出通道,從而,多個輸入通道通過卷積計算就得到多個輸出通道。
圖12 輸入為3個通道,輸出為5個通道的卷積層
圖13 輸入為3個通道,輸出為5個通道的卷積計算細節
圖片來源:https://blog.csdn.net/dcrmg/article/details/79652487
二維卷積計算可以推廣到N維,例如在三維卷積計算中,卷積核是一個立方體,並且會沿著輸入特徵圖的長、寬、深滑動。
此外,卷積層的如下性質會影響輸出特徵圖的尺寸:
輸入特徵圖尺寸
卷積核尺寸
步長(Stride):兩個連續的卷積核位置之間的距離
零填充(Zero Padding):輸入特徵圖鄰接填充的0的行/列數
我們舉幾個慄子來了解卷積層的上述性質:
圖14 步長為1,無填充
圖15 步長為2,填充1層
圖片來源:https://github.com/vdumoulin/conv_arithmetic
ReLU激活函數也應該算是一層,它逐元素地進行激活函數操作,但一般將它與卷積層看作是同一層。
2. 池化層池化層也稱為下採樣層(Subsampling)通常在連續的卷積層之間會周期性地插入一個池化層。它的作用是逐漸降低數據體的空間尺寸,這樣的話就能減少網絡中參數的數量,使得計算資源耗費變少,也能有效控制過擬合。池化操作一般有兩種,一種是均值池化(Average Pooling),一種是最大池化(Max Pooling),後者更為常見。如果濾波器是2x2的尺寸,則每個最大池化操作是從4個數字中取最大值(也就是在深度切片中某個2x2的區域),深度保持不變。
圖16 池化層作用
圖17 步長為2,尺寸為2*2的濾波器做Max Pooling
圖17所示為最大池化方法,其中,每個濾波器(對應每一種顏色)選擇其覆蓋的像素點中最大的數字,從而得到池化計算後的結果。
3. 全連接層
連接所有的特徵,將輸出值送給激活函數(如Softmax、ReLU等,從而進行分類)。
在介紹具體的神經網絡之前,讓我們先了解一些重要術語。
a)參數初始化方法(Initializer)
初始化方法定義了對Keras設置初始化權重的方法,通過參數kernel_initializer來指定,如果不特殊指定,則默認為Glorot Uniform初始化方法(詳細參數設置可參考Keras官方文檔:https://keras.io/initializers/)。
(1)常數初始化:參數初始化為固定值;
(2)正態分布類初始化:參數來自於指定均值和標準差的正態分布,包括截尾正態分布初始化、VarianceScaling、LeCun正態分布、Glorot正態分布和He正態分布初始化方法;
(3)均勻分布類初始化:參數來自於指定上下界的均勻分布,包括VarianceScaling、Lecun均勻分布、Glorot均勻分布和He均勻分布初始化方法;
(4)矩陣相關的初始化方法:包括使用隨機正交矩陣初始化和單位矩陣初始化(僅適用於二維方陣)的方法;
b)Epoch
使用訓練集的全部數據對模型進行一次完整的訓練,稱為一個epoch。
c)Batch
使用訓練集中的一小部分樣本對模型權重進行一次反向傳播的參數更新,這一小部分樣本被稱作batch。
d)迭代
迭代是重複反饋的動作,神經網絡中我們希望通過迭代進行多次的訓練以實現更高的預測準確率。每一次迭代得到的結果都會被作為下一次迭代的初始值,一個迭代包含一次正向訓練和一次反向傳遞。
到底是啥意思呢?讓我們再舉個慄子:對於一個有5000個訓練樣本的數據:將5000個樣本分成大小為500的batch,那麼在對參數進行初始化後,訓練完整個樣本集需要10次迭代,1個epoch。
我們使用的是有限的數據集,並且我們使用一個迭代過程——梯度下降來優化學習過程。因此僅僅更新權重一次或者說使用一個 epoch 是不夠的。隨著 epoch 數量增加,神經網絡中的權重的更新次數也增加,曲線從欠擬合變得過擬合,數據的多樣性會影響合適的 epoch 的數量。
整體的網絡結構也可以通過這個簡化的VGG來理解(這個網絡我們會在後面進一步學習)。
圖18 多層卷積神經網絡示例(A Mini VGG)
圖片來源:https://i1.wp.com/blog.mapillary.com/img/2016-09-13-deep-learning-neural-networks-theory.jpg
二
卷積神經網絡搭建
1. 一層卷積神經網絡
首先我們從一些常見的網絡結構入手。搭建單層的卷積神經網絡:INPUT -> CONV -> RELU-> POOL -> FC -> OUTPUT,將epoch設置為10,batch size設置為100,對Fashion-MNIST圖像數據進行預測。通過構建單層的神經網絡,預測精度已經可以達到90%,我們觀察右圖中訓練出的coat類的16個圖像,都具有十分明顯的外套特徵。
圖19 一層神經網絡訓練出來的coat類16個圖像
2. 兩層卷積神經網絡
構建兩層神經網絡:INPUT -> CONV -> RELU -> CONV -> POOL -> FC -> OUTPUT。在兩層神經網中,我們僅設置epoch為2,就已經可以達到87%的預測準確度。繪製擬合正確的20個T-shirt/Top圖像,可以明顯地觀察到輪廓;當我們把epoch增加到10時(和一層神經網絡設置一致),預測精度可以達到92%左右。
圖20 擬合正確的20個T-shirt/top圖像
3. CNN進階
掌握了比較基礎的卷積神經網絡,我們進一步學習更加複雜,也非常流行、有名的幾種結構:LeNet、AlexNet、VGG和ResNet。
(1)LeNet-5
LeNet-5模型是Yann LeCun教授於1998年在論文中提出的(LeCun, Y. et al., 1998),它是第一個成功應用於數字識別問題的卷積神經網絡。
圖21 LeNet-5網絡結構
LeNet-5共有7層(不包含輸入),每層都包含可訓練參數。在訓練整個網絡之前,對28*28的圖像加上零填充,轉換為32*32的輸入數據。C1層為卷積層,使用6個卷積核得到響應的輸出通道;S2層為池化層,採用最大池化的方法,池化尺寸為2*2;C3層為卷積層,使用16個不同的卷積核;S4層仍然為池化層,採用2*2的最大池化方法;C5層為卷積層,使用120個卷積核,輸出120個1*1的特徵圖;F6層與C5層全連接,輸出層與F6層全連接。
(2)AlexNet
在2012年的ImageNet競賽中,繼LeNet-5之後的第二個經典CNN網絡——以超出第二名10%以上的top-5準確率,勇奪ImageNet2012分類比賽的冠軍。
首先我們了解一下ImageNet數據集。它是一個數據量超過1500萬的圖像數據集,大約有22,000類,這個數據集由李飛飛團隊從2007年開始,耗費大量人力,通過各種方式(網絡抓取,人工標註,亞馬遜眾包平臺)收集製作而成,作為論文在CVPR-2009發布。通常說的ImageNet比賽指的是ImageNet Large-Scale Visual Recognition Challenge,簡稱ILSVRC,使用的數據集是ImageNet數據集的一個子集,一般說的ImageNet實際上指的是ImageNet的這個子集。以2012年為例,比賽的訓練集包含1281167張圖片,驗證集包含50000張圖片,測試集為100000張圖片。
圖22 ImageNet網站(http://www.image-net.org/)搜索cat得到的圖像示例
ILSVRC競賽的項目主要包括這幾個問題:(1)圖像分類與目標定位(CLS-LOC)(2)目標檢測(DET)(3)視頻目標檢測(VID)(4)場景分類(Scene),且接下來介紹的幾種網絡結構在第一類問題中有相當出色的表現。
傳統方法在圖像檢索技術上一直表現平平。比如傳統方法常用的尺度不變特徵變換(Scale-invariant feature transform,SIFT),SIFT特徵是圖像的局部特徵,對一定程度內的縮放、平移、旋轉、視角改變、亮度調整等畸變,都具有不變性,是過去最重要的圖像特徵提取方法之一。然而SIFT這類算法提取的特徵還是有局限性的,在ImageNet ILSVRC比賽的最好結果的錯誤率也有26%以上,而且常年難以產生突破。而圖像檢索的發展目標是希望模型又快又準,因此興起了基於CNN的方法,如AlexNet、VGG和ResNet等。
其中,圖像分類的任務是要判斷圖片中物體在1000個分類中所屬的類別,主要採用top-5錯誤率的評估方式,即對於每張圖給出5次猜測結果,只要5次中有一次命中真實類別就算正確分類,最後統計沒有命中的錯誤率。
AlexNet是2012年ImageNet競賽冠軍獲得者Hinton和他的學生Alex Krizhevsky設計的,是CNN向大規模應用打響的第一槍,宣告神經網絡的王者歸來。它的性能遠遠超出第二名(在圖像分類問題中具有16%的top5錯誤率,第二名是26%的top5錯誤率)。這個網絡的結構比LeNet-5更深更大,並且使用了層疊的卷積層來獲取特徵。
圖23 AlexNet網絡結構
AlexNet為8層結構,其中前5層為卷積層,後面3層為全連接層;學習參數有6千萬個,神經元有650,000個。與之前的深度學習網絡結構相比,它是如何讓錯誤率明顯降低的呢?
圖24 簡易AlexNet結構
圖片來源:https://github.com/BLLabs/MLLab#alexnet
ReLU激活函數:LeNet-5使用的是tanh激活函數,實驗結果表明,要將深度網絡訓練至錯誤率達到25%的話,使用ReLU只需5個epochs的迭代,但使用tanh單元則需要35個epochs的迭代,即用ReLU比tanh在訓練的速度上快6倍,並且ReLU激活函數能有效減輕深層CNN網絡訓練時梯度消失的問題。
Overlapping pooling:指池化單元在總結提取特徵的時候,其輸入會受到相鄰池化單元的輸入影響,也就是提取出來的結果可能是有重複的(對最大池化方法而言)。
數據增強(Data Augmentation):增強圖片數據集最簡單和最常用的方法是在不改變圖片核心元素(即不改變圖片的分類)的前提下對圖片進行一定的變換,比如在垂直和水平方向進行一定的平移、翻轉等,相當於進一步擴大了數據集,防止過擬合。
Dropout:一般用在全連接層後,作為一個正則化器(regularizer),在訓練時從神經網絡中隨機丟棄神經元(與其連接),能有效防止網絡過擬合。
在我們的Fashion-MNIST數據實驗中,設置20個epochs,batch size為100,並在更新參數時使用0.5的概率隨機丟棄對應層的神經元(與其連接),未使用數據增強技巧來訓練AlexNet,可以得到97%的預測準確率,相較於簡單的神經網絡已經有了相當大的提升。
(2)VGG
VGG是ILSVRC-2014中定位任務第一名和分類任務第二名。其突出貢獻在於證明使用很小的卷積核(receptive window size)(3*3),並增加網絡深度也可以有效提升模型的效果,而且VGG對其他數據集具有很好的泛化能力。
與AlexNet不同,VGG在網絡中使用很小的卷積。AlexNet在第一個卷積層的卷積是步長為4的11*11卷積核,第二個卷積層用5*5尺寸的卷積核,但VGG則全部使用3*3尺寸的卷積核。我們通過一個簡單的計算來說明小尺寸的卷積核計算效率更高:
由於2個堆積的3*3卷積核與1個5*5卷積核是同樣有效的(如下圖所示),因此我們比較這兩種卷積方法的計算效率。假設輸入通道與輸出通道都為C,則堆積的3*3卷積核需要計算的權值參數數量為2*(3*3)C=18C,而較大卷積核的參數數量為1*(5*5)=25C。同理,3個堆積的3*3卷積核與1個7*7卷積核效果相同,但7*7卷積核需要計算的權值參數比小尺寸的卷積核多81%。因此,使用3*3的小卷積核減少了模型儲存空間的使用,大大提高了計算效率。
圖25 2個3*3的卷積核與1個5*5卷積核堆積後效果相同
以VGG-16為例,訓練時輸入大小為224*224的RGB圖像,經過一系列卷積層處理,在卷積層中使用了步長為1的3*3卷積核,池化層採用max-pooling最大池化方法。一系列卷積層之後跟著全連接層,且所有隱藏層都使用ReLU激活函數。
圖26 VGG-16網絡結構
為了計算簡潔,我們搭建了僅有6個卷積層與3個全連接層的9層VGG,在我們的Fashion-MNIST數據實驗中,設置20個epochs,batch size為100,預測準確率仍然高達97%左右。在同樣的預測精度下,與AlexNet相比,VGG的訓練時間大大縮短,平均每個epoch只需要5秒左右,而AlexNet平均每個epoch需要大約20秒,因此VGG高效的計算更適用於大體量的複雜數據中。
(3)ResNet
但是更深的網絡其性能一定會更好嗎?實驗發現深度網絡出現了退化問題(Degradation problem):網絡深度增加時,網絡準確度出現飽和,甚至出現下降。
何愷明博士提出了殘差學習來解決退化問題。對於一個堆積層結構(幾層堆積而成)當輸入為x時其學習到的特徵記為H(x),現在我們希望其可以學習到殘差F(x)=H(x)-x,這樣其實原始的學習特徵是F(x)+x,之所以這樣是因為殘差學習相比原始特徵直接學習更容易——當一部分卷積權重接近於0的時候,這部分卷積層就相當於被跳過了,整體來看這個網絡就近似於一個較淺的網絡。當殘差為0時,此時堆積層僅僅做了恆等映射,至少網絡性能相對於原始特徵直接學習不會下降;實際上殘差不會為0,這也會使得堆積層在輸入特徵基礎上學習到新的特徵,從而擁有更好的性能。殘差學習的結構如下圖所示。這有點類似與電路中的「短路」,所以是一種短路連接(shortcut connection)。
圖27 兩種ResNet設計
上圖表示兩種ResNet的設計,一般稱整個結構為一個神經網絡塊(Building Block),以上圖右邊的設計為例(又稱為Bottleneck Design),第一個1x1的卷積把256維輸入通道降到64維,然後在最後通過1x1卷積恢復,整體上用的參數數目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,差了16.94倍。對於常規ResNet設計(上圖左),可以用於34層或者更少的網絡中,對於Bottleneck Design的ResNet通常用於更深的如50、101和152層這樣的網絡中,目的是減少計算和參數量。
圖28 ResNet的不同結構
以101層網絡ResNet-101為例,首先對輸入做7x7x64的卷積,然後經過3 + 4 + 23 + 3 = 33個網絡塊,每個網絡塊為3層,所以有33 x 3 = 99層,最後有一個全連接層(用於分類),所以1 + 99 + 1 = 101層
我們來看一下ResNet網絡與其他網絡在ImageNet上的對比結果,如下圖所示。可以看到ResNet-152其誤差降到了4.49%。
圖29 ResNet與其他網絡的對比結果
同樣地,我們使用Fashion-MNIST數據集對ResNet進行訓練,同樣設置batch size為100和20個epochs,預測的準確率已經可以提升至99%左右。
04通過本次學習,我們掌握了基本的神經網絡結構和核心概念,並在此基礎上了解了深度學習領域中應用非常廣泛的卷積神經網絡結構,以及幾種更為複雜和流行的卷積神經網絡——LeNet-5、AlexNet、VGG和ResNet,並使用Fashion-MNIST數據集對這幾種網絡結構的預測精度進行了比較。
卷積神經網絡在計算機視覺任務中有很廣泛的應用,包括圖像分類、物體檢測、物體追蹤、文本檢測、動作識別和場景標籤等,除此之外,自然語言處理領域也對CNN有較為成熟的應用。本文可以作為神經網絡的入門學習文檔,幫助大家進一步了解深度學習的發展現狀。
參考文獻
[1] Zhang, Q., Zhang, M., Chen, T., Sun, Z., Ma, Y., & Yu, B. (2019). Recent advances in convolutional neural network acceleration. Neurocomputing, 323, 37-51.
[2] LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11), 2278-2324.
[3] Srivastava, N. (2013). Improving Neural Networks with Dropout.
[4] Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems (pp. 1097-1105).
[5] He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. In Proceedings of the IEEE conference>
[6] Géron, A. (2017). Hands-on machine learning with Scikit-Learn and TensorFlow: concepts, tools, and techniques to build intelligent systems. " O'Reilly Media, Inc.".
[7] https://blog.csdn.net/lanran2/article/details/79057994
[8] https://blog.csdn.net/williamyi96/article/details/77531593
[9] https://www.jianshu.com/p/21c149b76996
[10] https://blog.csdn.net/Sophia_11/article/details/84570177
[11] https://blog.csdn.net/SIGAI_CSDN/article/details/81775047
[12] https://blog.csdn.net/xjy104165/article/details/78218057
[13] https://blog.csdn.net/chongtong/article/details/78713958
[14] https://blog.csdn.net/omnispace/article/details/78163710
[15] https://blog.csdn.net/qq_24695385/article/details/80368618
[16] https://www.cnblogs.com/liaohuiqiang/p/9609162.html
[17] https://www.cnblogs.com/Luv-GEM/p/10761925.html
[18] https://www.cnblogs.com/alexzhang92/p/10069518.html
[19] https://zhuanlan.zhihu.com/p/27256298
[20] https://zhuanlan.zhihu.com/p/29119239
[21]https://liam.page/2017/07/27/convolutions-and-convolution-neural-network/
[22]http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html
[23]http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/