卷积核和全连接层的区别_「动手学计算机视觉」第十六讲:卷积神经网络之AlexNet...
前言
前文詳細介紹了卷積神經(jīng)網(wǎng)絡的開山之作LeNet,雖然近幾年卷積神經(jīng)網(wǎng)絡非常熱門,但是在LeNet出現(xiàn)后的十幾年里,在目標識別領域卷積神經(jīng)網(wǎng)絡一直被傳統(tǒng)目標識別算法(特征提取+分類器)所壓制,直到2012年AlexNet(ImageNet Classification with Deep Convolutional
Neural Networks)在ImageNet挑戰(zhàn)賽一舉奪魁,使得卷積神經(jīng)網(wǎng)絡再次引起人們的重視,并因此而一發(fā)不可收拾,卷積神經(jīng)網(wǎng)絡的研究如雨后春筍一般不斷涌現(xiàn),推陳出新。
AlexNet是以它的第一作者Alex Krizhevsky而命名,這篇文章中也有深度學習領域三位大牛之一的Geoffrey Hinton的身影。AlexNet之所以這么有名氣,不僅僅是因為獲取比賽冠軍這么簡單。這么多年,目標識別、目標跟蹤相關的比賽層出不窮,獲得冠軍的團隊也變得非常龐大,但是反觀一下能夠像 AlexNet影響力這么大的,卻是寥寥可數(shù)。
AlexNet相比于上一代的LeNet它首先在數(shù)據(jù)集上做了很多工作,
第一點:數(shù)據(jù)集
我們都知道,限制深度學習的兩大因素分別輸算力和數(shù)據(jù)集,AlexNet引入了數(shù)據(jù)增廣技術,對圖像進行顏色變換、裁剪、翻轉等操作。
第二點:激活函數(shù)
在激活函數(shù)方面它采用ReLU函數(shù)代替Sigmoid函數(shù),前面我用一篇文章詳細的介紹了不同激活函數(shù)的優(yōu)缺點,如果看過的同學應該清楚,ReLU激活函數(shù)不僅在計算方面比Sigmoid更加簡單,而且可以克服Sigmoid函數(shù)在接近0和1時難以訓練的問題。
第三點:Dropout
這也是AlexNet相對于LeNet比較大一點不同之處,AlexNet引入了Dropout用于解決模型訓練過程中容易出現(xiàn)過擬合的問題,此后作者還發(fā)表幾篇文章詳細的介紹Dropout算法,它的引入使得卷積神經(jīng)網(wǎng)絡效果大大提升,直到如今Dropout在模型訓練過程中依然被廣泛使用。
第四點:模型結構
卷積神經(jīng)網(wǎng)絡的每次迭代,模型架構都會發(fā)生非常大的變化,卷積核大小、網(wǎng)絡層數(shù)、跳躍連接等等,這也是不同卷積神經(jīng)網(wǎng)絡模型之間的區(qū)別最明顯的一點,由于網(wǎng)絡模型比較龐大,一言半語無法描述完整,下面我就來詳細介紹一下AlexNet的網(wǎng)絡模型。
AlexNet
如果讀過前面一片文章應該了解,LeNet是一個5層的卷積神經(jīng)網(wǎng)絡模型,它有兩個卷積層和3個全連接層。對比而言,AlexNet是一個8層的卷積升級網(wǎng)絡模型,它有5個卷積層和3個全連接層。
我們在搭建一個網(wǎng)絡模型的過程中,重點應該關注如下幾點:
- 卷積核大小
- 輸入輸出通道數(shù)
- 步長
- 激活函數(shù)
關于AlexNet中使用的激活函數(shù)前面已經(jīng)介紹過,它使用的是ReLU激活函數(shù),它5層卷積層除了第一層卷積核為11*11、第二次為5*5之外,其余三層均為3*3,下面就詳細介紹一下AlexNet的模型結構,
第一層:卷積層
卷積核大小11*11,輸入通道數(shù)根據(jù)輸入圖像而定,輸出通道數(shù)為96,步長為4。
池化層窗口大小為3*3,步長為2。
第二層:卷積層
卷積核大小5*5,輸入通道數(shù)為96,輸出通道數(shù)為256,步長為2。
池化層窗口大小為3*3,步長為2。
第三層:卷積層
卷積核大小3*3,輸入通道數(shù)為256,輸出通道數(shù)為384,步長為1。
第四層:卷積層
卷積核大小3*3,輸入通道數(shù)為384,輸出通道數(shù)為384,步長為1。
第五層:卷積層
卷積核大小3*3,輸入通道數(shù)為384,輸出通道數(shù)為256,步長為1。
池化層窗口大小為3*3,步長為2。
第六層:全連接層
輸入大小為上一層的輸出,輸出大小為4096。
Dropout概率為0.5。
第七層:全連接層
輸入大小為4096,輸出大小為4096。
Dropout概率為0.5。
第八層:全連接層
輸入大小為4096,輸出大小為分類數(shù)。
注意:需要注意一點,5個卷積層中前2個卷積層后面都會緊跟一個池化層,而第3、4層卷積層后面沒有池化層,而是連續(xù)3、4、5層三個卷積層后才加入一個池化層。
編程實踐
在動手實踐LeNet文章中,我介紹了網(wǎng)絡搭建的過程,這種方式同樣適用于除LeNet之外的其他模型的搭建,我們需要首先完成網(wǎng)絡模型的搭建,然后再編寫訓練、驗證函數(shù)部分。
在前面一篇文章為了讓大家更加容易理解tensorflow的使用,更加清晰的看到網(wǎng)絡搭建的過程,因此逐行編碼進行模型搭建。但是,我們會發(fā)現(xiàn),同類型的網(wǎng)絡層之間很多參數(shù)是相同的,例如卷積核大小、輸出通道數(shù)、變量作用于的名稱,我們逐行搭建會有很多代碼冗余,我們完全可以把這些通用參數(shù)作為傳入?yún)?shù)提煉出來。因此,本文編程實踐中會側重于代碼規(guī)范,提高代碼的可讀性。
編程實踐中主要根據(jù)tensorflow接口的不同之處把網(wǎng)絡架構分為如下4個模塊:
- 卷積層
- 池化層
- 全連接層
- Dropout
卷積層
針對卷積層,我們把輸入、卷積核大小、輸入通道數(shù)、步長、變量作用域作為入?yún)?#xff0c;我們使用tensorflow時會發(fā)現(xiàn),我們同樣需要知道輸入數(shù)據(jù)的通道數(shù),關于這個變量,我們可以通過獲取輸入數(shù)據(jù)的尺寸獲得,
def conv_layer(self, X, ksize, out_filters, stride, name): in_filters = int(X.get_shape()[-1]) with tf.variable_scope(name) as scope: weight = tf.get_variable("weight總結
以上是生活随笔為你收集整理的卷积核和全连接层的区别_「动手学计算机视觉」第十六讲:卷积神经网络之AlexNet...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微pe工具箱 系统安装教程_微PE工具箱
- 下一篇: tensorflow学习笔记七-----