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