卷積神經網絡的理解

CNN中減小參數的2兩個規則:python

一、局部感知。生物學中,視覺皮層的神經元是局部感知信息的,只響應某些特定區域的刺激;圖像的空間聯繫中,局部的像素聯繫較爲緊密,距離較遠的像素相關性較弱。算法

  這個對應於算法中卷積核的大小,mnist手寫識別在28*28的像素中取patch爲5*5。ide

上圖中:左邊是全鏈接,右邊是局部鏈接。函數

二、權值共享。每一個神經元對應的參數(權值)都相等。隱含的原理是:圖像的一部分的統計特性與其餘部分是同樣的。那麼在這一部分學習的特徵也能用在另外一部分上,因此對於這個圖像上的全部位置,都能使用一樣的學習特徵。學習

注:卷積可參考數字圖像處理中的濾波處理,濾波就是對於大矩陣中的每一個像素, 計算它周圍像素濾波器(卷積核)矩陣對應位置元素的乘積, 而後把結果相加到一塊兒, 最終獲得的值就做爲該像素的新值, 這樣就完成了一次濾波。該過程也叫卷積,區別在於,圖像卷積計算,須要先翻轉卷積核, 也就是繞卷積核中心旋轉 180度。spa

如下轉自http://blog.csdn.net/mao_xiao_feng/article/details/78004522.net

1)tf卷積函數

慣例先展現函數:code

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

除去name參數用以指定該操做的name,與方法有關的一共五個參數:blog

  • input: 
    指須要作卷積的輸入圖像,它要求是一個Tensor,具備[batch, in_height, in_width, in_channels]這樣的shape,具體含義是[訓練時一個batch的圖片數量, 圖片高度, 圖片寬度, 圖像通道數],注意這是一個4維的Tensor,要求類型爲float32和float64其中之一圖片

  • filter: 
    至關於CNN中的卷積核,它要求是一個Tensor,具備[filter_height, filter_width, in_channels, out_channels]這樣的shape,具體含義是[卷積核的高度,卷積核的寬度,圖像通道數,卷積核個數],要求類型與參數input相同,有一個地方須要注意,第三維in_channels,就是參數input的第四維

  • strides:卷積時在圖像每一維的滑動步長,這是一個一維的向量,長度4

  • padding: 
    string類型的量,只能是」SAME」,」VALID」其中之一,這個值決定了不一樣的卷積方式(「SAME」容許卷積核停留在圖像邊緣,保證輸入與輸出大小相同;「valid」則卷積核不能停留在圖像邊緣,輸出圖像會變小,若輸入5*5,使用3*3卷積核,則輸出3*3)

  • use_cudnn_on_gpu: 
    bool類型,是否使用cudnn加速,默認爲true

結果返回一個Tensor,這個輸出,就是咱們常說的feature map。

2)tf最大值池化函數

tf.nn.max_pool(value, ksize, strides, padding, name=None)

參數是四個,和卷積很相似:

 第一個參數value:須要池化的輸入,通常池化層接在卷積層後面,因此輸入一般是feature map,依然是[batch, height, width, channels]這樣的shape

第二個參數ksize:池化窗口的大小,取一個四維向量,通常是[1, height, width, 1],由於咱們不想在batch和channels上作池化,因此這兩個維度設爲了1

第三個參數strides:和卷積相似,窗口在每個維度上滑動的步長,通常也是[1, stride,stride, 1]

第四個參數padding:和卷積相似,能夠取'VALID' 或者'SAME'

返回一個Tensor,類型不變,shape仍然是[batch, height, width, channels]這種形式。

總結:卷積或池化後特徵圖譜的大小主要取決於滑動步長(strides)和padding(邊距處理方式)。strides=1,padding=‘SAME’,則輸入與輸出大小相同;strides=2或padding=‘valid’都會使輸出圖像變小。

其餘:

輸出圖像的尺寸

輸出圖像的空間尺寸能夠計算爲([W-F + 2P] / S)+1。在這裏,W 是輸入尺寸,F 是過濾器的尺寸,P 是填充數量,S 是步幅數字。假如咱們有一張 28*28*3 的輸入圖像(彩色3通道),咱們使用 32 個尺寸爲 5*5*3 的過濾器,單步幅和用零填充(‘SAME’)。

那麼 W=28,F=5,P=4,S=1。輸出深度等於應用的濾波器的數量,即 32,輸出尺寸大小爲 ([28-5+4]/1)+1 = 28。所以輸出尺寸是 28*28*10。

而池化的時候通常步長會是2,這樣,圖像會被縮小。

另,卷積層和池化層,是用來提取特徵(初識卷積層提取通常特徵(邊緣檢測或線條),後面的卷積層用來提取複雜一些的特徵),並減小原始圖像的參數。全鏈接層用來輸出分類,softmax用來將分類結果轉化爲與真實分類一樣的形式(one-hot形式),以後可進行代價函數(交叉熵)計算,更新權值和偏置項。

 卷積->激活->池化

相關文章
相關標籤/搜索