CNN中減小參數的2兩個規則:python
一、局部感知。生物學中,視覺皮層的神經元是局部感知信息的,只響應某些特定區域的刺激;圖像的空間聯繫中,局部的像素聯繫較爲緊密,距離較遠的像素相關性較弱。算法
這個對應於算法中卷積核的大小,mnist手寫識別在28*28的像素中取patch爲5*5。ide
上圖中:左邊是全鏈接,右邊是局部鏈接。函數
二、權值共享。每一個神經元對應的參數(權值)都相等。隱含的原理是:圖像的一部分的統計特性與其餘部分是同樣的。那麼在這一部分學習的特徵也能用在另外一部分上,因此對於這個圖像上的全部位置,都能使用一樣的學習特徵。學習
注:卷積可參考數字圖像處理中的濾波處理,濾波就是對於大矩陣中的每一個像素, 計算它周圍像素和濾波器(卷積核)矩陣對應位置元素的乘積, 而後把結果相加到一塊兒, 最終獲得的值就做爲該像素的新值, 這樣就完成了一次濾波。該過程也叫卷積,區別在於,圖像卷積計算,須要先翻轉卷積核
, 也就是繞卷積核
中心旋轉 180
度。spa
如下轉自http://blog.csdn.net/mao_xiao_feng/article/details/78004522.net
慣例先展現函數: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形式),以後可進行代價函數(交叉熵)計算,更新權值和偏置項。
卷積->激活->池化