TensorFlow深度學(xué)習(xí)之卷積神經(jīng)網(wǎng)絡(luò)CNN
一、卷積神經(jīng)網(wǎng)絡(luò)的概述
卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeural Network,CNN)最初是為解決圖像識(shí)別等問(wèn)題設(shè)計(jì)的,CNN現(xiàn)在的應(yīng)用已經(jīng)不限于圖像和視頻,也可用于時(shí)間序列信號(hào),比如音頻信號(hào)和文本數(shù)據(jù)等。CNN作為一個(gè)深度學(xué)習(xí)架構(gòu)被提出的最初訴求是降低對(duì)圖像數(shù)據(jù)預(yù)處理的要求,避免復(fù)雜的特征工程。在卷積神經(jīng)網(wǎng)絡(luò)中,第一個(gè)卷積層會(huì)直接接受圖像像素級(jí)的輸入,每一層卷積(濾波器)都會(huì)提取數(shù)據(jù)中最有效的特征,這種方法可以提取到圖像中最基礎(chǔ)的特征,而后再進(jìn)行組合和抽象形成更高階的特征,因此CNN在理論上具有對(duì)圖像縮放、平移和旋轉(zhuǎn)的不變性。
卷積神經(jīng)網(wǎng)絡(luò)CNN的要點(diǎn)就是局部連接(LocalConnection)、權(quán)值共享(Weights Sharing)和池化層(Pooling)中的降采樣(Down-Sampling)。其中,局部連接和權(quán)值共享降低了參數(shù)量,使訓(xùn)練復(fù)雜度大大下降并減輕了過(guò)擬合。同時(shí)權(quán)值共享還賦予了卷積網(wǎng)絡(luò)對(duì)平移的容忍性,池化層降采樣則進(jìn)一步降低了輸出參數(shù)量并賦予模型對(duì)輕度形變的容忍性,提高了模型的泛化能力。可以把卷積層卷積操作理解為用少量參數(shù)在圖像的多個(gè)位置上提取相似特征的過(guò)程。
卷積層的空間排列:上文講解了卷積層中每個(gè)神經(jīng)元與輸入數(shù)據(jù)體之間的連接方式,但是尚未討論輸出數(shù)據(jù)體中神經(jīng)元的數(shù)量,以及它們的排列方式。3個(gè)超參數(shù)控制著輸出數(shù)據(jù)體的尺寸:深度(depth),步長(zhǎng)(stride)和零填充(zero-padding)。首先,輸出數(shù)據(jù)體的深度是一個(gè)超參數(shù):它和使用的濾波器的數(shù)量一致,而每個(gè)濾波器在輸入數(shù)據(jù)中尋找一些不同的東西。其次,在滑動(dòng)濾波器的時(shí)候,必須指定步長(zhǎng)。有時(shí)候?qū)⑤斎霐?shù)據(jù)體用0在邊緣處進(jìn)行填充是很方便的。這個(gè)零填充(zero-padding)的尺寸是一個(gè)超參數(shù)。零填充有一個(gè)良好性質(zhì),即可以控制輸出數(shù)據(jù)體的空間尺寸(最常用的是用來(lái)保持輸入數(shù)據(jù)體在空間上的尺寸,這樣輸入和輸出的寬高都相等)。輸出數(shù)據(jù)體在空間上的尺寸可以通過(guò)輸入數(shù)據(jù)體尺寸(W),卷積層中神經(jīng)元的感受野尺寸(F),步長(zhǎng)(S)和零填充的數(shù)量(P)的函數(shù)來(lái)計(jì)算。(這里假設(shè)輸入數(shù)組的空間形狀是正方形,即高度和寬度相等)輸出數(shù)據(jù)體的空間尺寸為(W-F +2P)/S+1,在計(jì)算上,輸入數(shù)據(jù)體的長(zhǎng)和寬按照該公式計(jì)算,深度依賴(lài)于濾波器的數(shù)量。步長(zhǎng)的限制:注意這些空間排列的超參數(shù)之間是相互限制的。舉例說(shuō)來(lái),當(dāng)輸入尺寸W=10,不使用零填充則P=0,濾波器尺寸F=3,這樣步長(zhǎng)S=2就行不通,結(jié)果4.5不是整數(shù),這就是說(shuō)神經(jīng)元不能整齊對(duì)稱(chēng)地滑過(guò)輸入數(shù)據(jù)體。
匯聚層使用MAX操作,對(duì)輸入數(shù)據(jù)體的每一個(gè)深度切片獨(dú)立進(jìn)行操作,改變它的空間尺寸。最常見(jiàn)的形式是匯聚層使用尺寸2x2的濾波器,以步長(zhǎng)為2來(lái)對(duì)每個(gè)深度切片進(jìn)行降采樣,將其中75%的激活信息都丟掉。每個(gè)MAX操作是從4個(gè)數(shù)字中取最大值(也就是在深度切片中某個(gè)2x2的區(qū)域)。深度保持不變。
二、卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)通常是由三種層構(gòu)成:卷積層,匯聚層(除非特別說(shuō)明,一般就是最大值匯聚)和全連接層(fully-connected簡(jiǎn)稱(chēng)FC)。ReLU激活函數(shù)也應(yīng)該算是是一層,它逐元素地進(jìn)行激活函數(shù)操作。
卷積神經(jīng)網(wǎng)絡(luò)最常見(jiàn)的形式就是將一些卷積層和ReLU層放在一起,其后緊跟匯聚層,然后重復(fù)如此直到圖像在空間上被縮小到一個(gè)足夠小的尺寸,在某個(gè)地方過(guò)渡成成全連接層也較為常見(jiàn)。最后的全連接層得到輸出,比如分類(lèi)評(píng)分等。
最常見(jiàn)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下:
INPUT -> [[CONV -> RELU]*N ->POOL?]*M -> [FC -> RELU]*K -> FC
其中*指的是重復(fù)次數(shù),POOL?指的是一個(gè)可選的匯聚層。其中N >=0,通常N<=3,M>=0,K>=0,通常K<3。
幾個(gè)小濾波器卷積層的組合比一個(gè)大濾波器卷積層好。直觀說(shuō)來(lái),最好選擇帶有小濾波器的卷積層組合,而不是用一個(gè)帶有大的濾波器的卷積層。前者可以表達(dá)出輸入數(shù)據(jù)中更多個(gè)強(qiáng)力特征,使用的參數(shù)也更少。唯一的不足是,在進(jìn)行反向傳播時(shí),中間的卷積層可能會(huì)導(dǎo)致占用更多的內(nèi)存。
輸入層(包含圖像的)應(yīng)該能被2整除很多次。常用數(shù)字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷積神經(jīng)網(wǎng)絡(luò)),384和512。
卷積層應(yīng)該使用小尺寸濾波器(比如3x3或最多5x5),使用步長(zhǎng)S=1。還有一點(diǎn)非常重要,就是對(duì)輸入數(shù)據(jù)進(jìn)行零填充,這樣卷積層就不會(huì)改變輸入數(shù)據(jù)在空間維度上的尺寸。一般對(duì)于任意F,當(dāng)P=(F-1)/2的時(shí)候能保持輸入尺寸。如果必須使用更大的濾波器尺寸(比如7x7之類(lèi)),通常只用在第一個(gè)面對(duì)原始圖像的卷積層上。
匯聚層負(fù)責(zé)對(duì)輸入數(shù)據(jù)的空間維度進(jìn)行降采樣,提升了模型的畸變?nèi)萑棠芰?。最常用的設(shè)置是用用2x2感受野的最大值匯聚,步長(zhǎng)為2。注意這一操作將會(huì)把輸入數(shù)據(jù)中75%的激活數(shù)據(jù)丟棄(因?yàn)閷?duì)寬度和高度都進(jìn)行了2的降采樣)。另一個(gè)不那么常用的設(shè)置是使用3x3的感受野,步長(zhǎng)為2。最大值匯聚的感受野尺寸很少有超過(guò)3的,因?yàn)閰R聚操作過(guò)于激烈,易造成數(shù)據(jù)信息丟失,這通常會(huì)導(dǎo)致算法性能變差。
三、CNN最大的特點(diǎn)在于卷積的權(quán)值共享(參數(shù)共享),可以大幅度減少神經(jīng)網(wǎng)絡(luò)的參數(shù)數(shù)量,防止過(guò)擬合的同時(shí)又降低了神經(jīng)網(wǎng)絡(luò)模型的復(fù)雜度。如何理解?
假設(shè)輸入圖像尺寸是1000*1000并且假定是灰度圖像,即只有一個(gè)顏色通道。那么一張圖片就有100萬(wàn)個(gè)像素點(diǎn),輸入維度就是100萬(wàn)。如果采用全連接層(Fully Connected Layer,F(xiàn)CL)的話,隱含層與輸入層相同大小(100萬(wàn)個(gè)隱含層節(jié)點(diǎn)),那么將產(chǎn)生100萬(wàn)*100萬(wàn)=1萬(wàn)億個(gè)連接,僅此就有1萬(wàn)億個(gè)參數(shù)需要去訓(xùn)練,這是不可想象的。考慮到人的視覺(jué)感受野的概念,每一個(gè)感受野只接受一小塊區(qū)域的信號(hào),每一個(gè)神經(jīng)元不需要接收全部像素點(diǎn)的信息,只需要接收局部像素點(diǎn)作為輸入,而將所有這些神經(jīng)元接收的局部信息綜合起來(lái)就可以得到全局的信息。于是將之前的全連接模式修改為局部連接,假設(shè)局部感受野大小是10*10,即每個(gè)隱含節(jié)點(diǎn)只與10*10個(gè)像素點(diǎn)相連,那么現(xiàn)在只需要10*10*100萬(wàn)=1億個(gè)連接了,相比之前的1萬(wàn)億已經(jīng)縮小了10000倍。假設(shè)我們的局部連接方式是卷積操作,即默認(rèn)每一個(gè)隱含節(jié)點(diǎn)的參數(shù)都完全一樣,那么我們的參數(shù)將會(huì)是10*10=100個(gè)。不論圖像尺寸有多大,都是這100個(gè)參數(shù),即卷積核的尺寸,這就是卷積對(duì)減小參數(shù)量的貢獻(xiàn)。這也就是所謂的權(quán)值共享。我們采取增加卷積核的數(shù)量來(lái)多提取一些特征,每一個(gè)卷積核濾波得到的圖像就是一類(lèi)特征的映射,即一個(gè)Feature Map。一般來(lái)說(shuō),我們使用100個(gè)卷積核在第一個(gè)卷積層就足夠了,這樣我們有100*100=10000個(gè)參數(shù)相比之前的1億又縮小了10000倍。卷積的好處是,不管圖片尺寸如何,需要訓(xùn)練的參數(shù)數(shù)量只跟卷積核大小和數(shù)量有關(guān),并且需要注意的是,盡管參數(shù)的數(shù)量大大下降了,但是我們的隱含節(jié)點(diǎn)的數(shù)量并沒(méi)有下降,隱含節(jié)點(diǎn)的數(shù)量只跟卷積的步長(zhǎng)有關(guān)系。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python api構(gòu)建tensorrt加速模型的步驟詳解
小編個(gè)人認(rèn)為python比c++更容易讀并且已經(jīng)有很多包裝很好的科學(xué)運(yùn)算庫(kù)(numpy,scikit等),今天通過(guò)本文給大家分享Python api構(gòu)建tensorrt加速模型的步驟,感興趣的朋友一起看看吧2021-09-09python在Windows下安裝setuptools(easy_install工具)步驟詳解
這篇文章主要介紹了python在Windows下安裝setuptools(easy_install工具)步驟,簡(jiǎn)單介紹了setuptools并分析了其安裝步驟與所涉及的相關(guān)軟件,需要的朋友可以參考下2016-07-07本地文件上傳到七牛云服務(wù)器示例(七牛云存儲(chǔ))
這篇文章主要介紹了使用PYTHON把本地文件上傳到七牛云服務(wù)的方法,開(kāi)發(fā)環(huán)境是Python 2.7,大家參考使用吧2014-01-01Numpy實(shí)現(xiàn)矩陣運(yùn)算及線性代數(shù)應(yīng)用
這篇文章主要介紹了Numpy實(shí)現(xiàn)矩陣運(yùn)算及線性代數(shù)應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Django之form組件自動(dòng)校驗(yàn)數(shù)據(jù)實(shí)現(xiàn)
這篇文章主要介紹了Django之form組件自動(dòng)校驗(yàn)數(shù)據(jù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Python Sympy計(jì)算梯度、散度和旋度的實(shí)例
今天小編就為大家分享一篇Python Sympy計(jì)算梯度、散度和旋度的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12Python如何讀取16進(jìn)制byte數(shù)據(jù)
這篇文章主要介紹了Python如何讀取16進(jìn)制byte數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05