卷積神經網絡(CNN)中的卷積和池化

一、簡介
在這裏分別介紹一下卷積層、池化層、填充這三個在卷積神經網絡中非常基礎且常用的技術,同時還會以tensorflow爲例講一下這幾個函數參數的含義以及該怎麼使用。

二、卷積神經網絡(CNN)中的卷積和池化
卷積層介紹
卷積神經網絡(convolutional neural network),從它的名稱就可以看出,卷積是其中最爲關鍵的部分。在前面講解圖像去噪和圖像分割中提到了一些用於分割和去噪的算法,例如sobel算子、中值濾波,其實卷積的概念和這些有相同之處。
把輸入圖像看作是一個n維矩陣,然後拿一個mm維(m<n)的卷積核(或者稱爲濾波器),從圖像的左上角開始沿着從左至右、從上之下進行"掃描",每當移動到一個窗口後和對應的窗口做卷積運算(嚴格的說是互相關運算),用直白的話來說就是對應元素相乘之後加和。移動過程中涉及一個重要的概念—步長(stride),它的意思就是"掃描"過程中每次移動幾個像素,如果步長stride=1,那麼從左至右、從上之下逐個像素的移動。
在這裏插入圖片描述
以上圖二維卷積運算爲例,輸入圖像爲一個5
5的矩陣,卷積核爲3*3,以步長stride=1進行卷積運算,在左上角這個窗口每個對應元素先相乘再加和,即:
在這裏插入圖片描述

以這種方式逐個窗口進行計算,就得到圖中等號右邊的輸出結果。
tensorflow使用:
在tensorflow中關於卷積層的函數爲:tensorflow.nn. conv2d(input, filter, strides, padding)
其中參數分別爲:
• input:輸入數據或者上一層網絡輸出的結果
• filter:卷積核,它的是一個14維的參數,例如filter=[5, 5, 3, 96],這4個數字的概念分別是卷積核高度、卷積核寬度、輸入數據通道數、輸出數據通道數
• strides:這是前面所講的步伐,同卷積核一樣,它也是一個1
4維的參數,例如strides=[1, 2, 2, 1],這4個數字分別是batch方向移動的步長、水平方向移動的步長、垂直方向移動的步長、通道方向移動的步長,由於在運算過程中是不跳過batch和通道的,所以通常情況下第1個和第4個數字都是1
• padding:是填充方式,主要有兩種方式,SAME, VALID,後面會講什麼是填充
池化層介紹
池化層和卷積層一樣,是CNN模型必不可少的一個部分,在很多卷積層後會緊跟一個池化層,而且在統計卷積神經網絡時,池化層是不單獨稱爲網絡層的,它與卷積層、激活函數、正則化同時使用時共同稱爲1個卷積層。
池化層又成爲下采樣或者欠採樣,它的主要功能是對於特徵進行降維,壓縮數據和參數量,避免過擬合,常用的池化方式有兩種:
• 最大池化
• 平均池化
以最大池化爲例介紹一下它是怎麼實現的,
在這裏插入圖片描述
和卷積層類似,池化層也有窗口和步長的概念,其中步長在裏面的作用也是完全相同的,就是窗口每次移動的像素個數,所以不再贅述。池化層的窗口概念和卷積層中是截然不同的,在卷積層中每移動到一個窗口,對應的卷積核和輸入圖像做卷積運算。而在池化層中,窗口每移動到一個位置,就選擇出這個窗口中的最大值輸出,如果是平均池化就輸出這個窗口內的平均值。

三、總結
本篇文章中,我們分析了卷及神經網絡的卷積和池化等相關內容,結合上期的”卷積神經網絡各層分析”,至此卷積神經網絡的層級部分我們就介紹完了,下面我們將對卷積神經網絡卷積核部分進行介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章