TensorFlow深度學習之卷積神經網路CNN,tensorflowcnn

來源:互聯網
上載者:User

TensorFlow深度學習之卷積神經網路CNN,tensorflowcnn

一、卷積神經網路的概述

卷積神經網路(ConvolutionalNeural Network,CNN)最初是為解決Image Recognition等問題設計的,CNN現在的應用已經不限於映像和視頻,也可用於時間序列訊號,比如音頻訊號和文本資料等。CNN作為一個深度學習架構被提出的最初訴求是降低對映像資料預先處理的要求,避免複雜的特徵工程。在卷積神經網路中,第一個卷積層會直接接受映像像素級的輸入,每一層卷積(濾波器)都會提取資料中最有效特徵,這種方法可以提取到映像中最基礎的特徵,而後再進行組合和抽象形成更高階的特徵,因此CNN在理論上具有對映像縮放、平移和旋轉的不變性。

卷積神經網路CNN的要點就是局部串連(LocalConnection)、權值共用(Weights Sharing)和池化層(Pooling)中的降採樣(Down-Sampling)。其中,局部串連和權值共用降低了參數量,使訓練複雜度大大下降並減輕了過擬合。同時權值共用還賦予了卷積網路對平移的容忍性,池化層降採樣則進一步降低了輸出參數量並賦予模型對輕度形變的容忍性,提高了模型的泛化能力。可以把卷積層卷積操作理解為用少量參數在映像的多個位置上提取相似特徵的過程。

卷積層的空間排列:上文講解了卷積層中每個神經元與輸入資料體之間的串連方式,但是尚未討論輸出資料體中神經元的數量,以及它們的相片順序。3個超參數控制著輸出資料體的尺寸:深度(depth),步長(stride)和零填充(zero-padding)。首先,輸出資料體的深度是一個超參數:它和使用的濾波器的數量一致,而每個濾波器在輸入資料中尋找一些不同的東西。其次,在滑動濾波器的時候,必須指定步長。有時候將輸入資料體用0在邊緣處進行填充是很方便的。這個零填充(zero-padding)的尺寸是一個超參數。零填充有一個良好性質,即可以控制輸出資料體的空間尺寸(最常用的是用來保持輸入資料體在空間上的尺寸,這樣輸入和輸出的寬高都相等)。輸出資料體在空間上的尺寸可以通過輸入資料體尺寸(W),卷積層中神經元的感受野尺寸(F),步長(S)和零填充的數量(P)的函數來計算。(這裡假設輸入數組的空間形狀是正方形,即高度和寬度相等)輸出資料體的空間尺寸為(W-F +2P)/S+1,在計算上,輸入資料體的長和寬按照該公式計算,深度依賴於濾波器的數量。步長的限制:注意這些空間排列的超參數之間是相互限制的。舉例說來,當輸入尺寸W=10,不使用零填充則P=0,濾波器尺寸F=3,這樣步長S=2就行不通,結果4.5不是整數,這就是說神經元不能整齊對稱地滑過輸入資料體。

匯聚層使用MAX操作,對輸入資料體的每一個深度切片獨立進行操作,改變它的空間尺寸。最常見的形式是匯聚層使用尺寸2x2的濾波器,以步長為2來對每個深度切片進行降採樣,將其中75%的啟用資訊都丟掉。每個MAX操作是從4個數字中取最大值(也就是在深度切片中某個2x2的地區)。深度保持不變。

二、卷積神經網路的結構

卷積神經網路通常是由三種層構成:卷積層,匯聚層(除非特別說明,一般就是最大值匯聚)和全串連層(fully-connected簡稱FC)。ReLU啟用函數也應該算是是一層,它逐元素地進行啟用函數操作。

卷積神經網路最常見的形式就是將一些卷積層和ReLU層放在一起,其後緊跟匯聚層,然後重複如此直到映像在空間上被縮小到一個足夠小的尺寸,在某個地方過渡成成全串連層也較為常見。最後的全串連層得到輸出,比如分類評分等。

最常見的卷積神經網路結構如下:

INPUT -> [[CONV -> RELU]*N ->POOL?]*M -> [FC -> RELU]*K -> FC

其中*指的是重複次數,POOL?指的是一個可選的匯聚層。其中N >=0,通常N<=3,M>=0,K>=0,通常K<3。

幾個小濾波器卷積層的組合比一個大濾波器卷積層好。直觀說來,最好選擇帶有小濾波器的卷積層組合,而不是用一個帶有大的濾波器的卷積層。前者可以表達出輸入資料中更多個強力特徵,使用的參數也更少。唯一的不足是,在進行反向傳播時,中間的卷積層可能會導致佔用更多的記憶體。

輸入層(包含映像的)應該能被2整除很多次。常用數字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷積神經網路),384和512。

卷積層應該使用小尺寸濾波器(比如3x3或最多5x5),使用步長S=1。還有一點非常重要,就是對輸入資料進行零填充,這樣卷積層就不會改變輸入資料在空間維度上的尺寸。一般對於任意F,當P=(F-1)/2的時候能保持輸入尺寸。如果必須使用更大的濾波器尺寸(比如7x7之類),通常只用在第一個面對原始映像的卷積層上。

匯聚層負責對輸入資料的空間維度進行降採樣,提升了模型的畸變容忍能力。最常用的設定是用用2x2感受野的最大值匯聚,步長為2。注意這一操作將會把輸入資料中75%的啟用資料丟棄(因為對寬度和高度都進行了2的降採樣)。另一個不那麼常用的設定是使用3x3的感受野,步長為2。最大值匯聚的感受野尺寸很少有超過3的,因為匯聚操作過於激烈,易造成資料資訊丟失,這通常會導致演算法效能變差。

三、CNN最大的特點在於卷積的權值共用(參數共用),可以大幅度減少神經網路的參數數量,防止過擬合的同時又降低了神經網路模型的複雜度。如何理解?

假設輸入映像尺寸是1000*1000並且假定是灰階映像,即只有一個色彩通道。那麼一張圖片就有100萬個像素點,輸入維度就是100萬。如果採用全串連層(Fully Connected Layer,FCL)的話,隱含層與輸入層相同大小(100萬個隱含層節點),那麼將產生100萬*100萬=1萬億個串連,僅此就有1萬億個參數需要去訓練,這是不可想象的。考慮到人的視覺感受野的概念,每一個感受野只接受一小塊地區的訊號,每一個神經元不需要接收全部像素點的資訊,只需要接收局部像素點作為輸入,而將所有這些神經元接收的局部資訊綜合起來就可以得到全域的資訊。於是將之前的全串連模式修改為局部串連,假設局部感受野大小是10*10,即每個隱含節點只與10*10個像素點相連,那麼現在只需要10*10*100萬=1億個串連了,相比之前的1萬億已經縮小了10000倍。假設我們的局部串連方式是卷積操作,即預設每一個隱含節點的參數都完全一樣,那麼我們的參數將會是10*10=100個。不論映像尺寸有多大,都是這100個參數,即卷積核的尺寸,這就是卷積對減小參數量的貢獻。這也就是所謂的權值共用。我們採取增加卷積核的數量來多提取一些特徵,每一個卷積核濾波得到的映像就是一類特徵的映射,即一個Feature Map。一般來說,我們使用100個卷積核在第一個卷積層就足夠了,這樣我們有100*100=10000個參數相比之前的1億又縮小了10000倍。卷積的好處是,不管圖片尺寸如何,需要訓練的參數數量只跟卷積核大小和數量有關,並且需要注意的是,儘管參數的數量大大下降了,但是我們的隱含節點的數量並沒有下降,隱含節點的數量只跟卷積的步長有關係。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.