Caffe學習系列(3):視覺層(Vision Layers)及參數 Caffe學習系列(2):數據層及參數

全部的層都具備的參數,如name, type, bottom, top和transform_param請參看個人前一篇文章:Caffe學習系列(2):數據層及參數html

本文只講解視覺層(Vision Layers)的參數,視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。算法

一、Convolution層:網絡

就是卷積層,是卷積神經網絡(CNN)的核心層。ide

層類型:Convolutionpost

  lr_mult: 學習率的係數,最終的學習率是這個數乘以solver.prototxt配置文件中的base_lr。若是有兩個lr_mult, 則第一個表示權值的學習率,第二個表示偏置項的學習率。通常偏置項的學習率是權值學習率的兩倍。學習

在後面的convolution_param中,咱們能夠設定卷積層的特有參數。url

必須設置的參數:spa

    num_output: 卷積核(filter)的個數code

    kernel_size: 卷積核的大小。若是卷積核的長和寬不等,須要用kernel_h和kernel_w分別設定orm

其它參數:

     stride: 卷積核的步長,默認爲1。也能夠用stride_h和stride_w來設置。

     pad: 擴充邊緣,默認爲0,不擴充。 擴充的時候是左右、上下對稱的,好比卷積核的大小爲5*5,那麼pad設置爲2,則四個邊緣都擴充2個像素,即寬度和高度都擴充了4個像素,這樣卷積運算以後的特徵圖就不會變小。也能夠經過pad_h和pad_w來分別設定。

      weight_filler: 權值初始化。 默認爲「constant",值全爲0,不少時候咱們用"xavier"算法來進行初始化,也能夠設置爲」gaussian"
      bias_filler: 偏置項的初始化。通常設置爲"constant",值全爲0。
      bias_term: 是否開啓偏置項,默認爲true, 開啓
      group: 分組,默認爲1組。若是大於1,咱們限制卷積的鏈接操做在一個子集內。若是咱們根據圖像的通道來分組,那麼第i個輸出分組只能與第i個輸入分組進行鏈接。
 
輸入:n*c 0*w 0*h 0
輸出:n*c 1*w 1*h 1
其中,c 1就是參數中的num_output,生成的特徵圖個數
 w 1=(w 0+2*pad-kernel_size)/stride+1;
 h 1=(h 0+2*pad-kernel_size)/stride+1;
若是設置stride爲1,先後兩次卷積部分存在重疊。若是設置pad=(kernel_size-1)/2,則運算後,寬度和高度不變。
示例:
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
  二、Pooling層
也叫池化層,爲了減小運算量和數據維度而設置的一種層。
層類型:Pooling
必須設置的參數:
     kernel_size: 池化的核大小。也能夠用kernel_h和kernel_w分別設定。
其它參數:
   pool: 池化方法,默認爲MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC
  pad: 和卷積層的pad的同樣,進行邊緣擴充。默認爲0
  stride: 池化的步長,默認爲1。通常咱們設置爲2,即不重疊。也能夠用stride_h和stride_w來設置。
 示例:
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}

pooling層的運算方法基本是和卷積層是同樣的。

輸入:n*c*w 0*h 0
輸出:n*c*w 1*h 1
和卷積層的區別就是其中的c保持不變
 w 1=(w 0+2*pad-kernel_size)/stride+1;
 h 1=(h 0+2*pad-kernel_size)/stride+1;
若是設置stride爲2,先後兩次卷積部分不重疊。100*100的特徵圖池化後,變成50*50.
 
三、Local Response Normalization (LRN)層
此層是對一個輸入的局部區域進行歸一化,達到「側抑制」的效果。可去搜索AlexNet或GoogLenet,裏面就用到了這個功能
 層類型:LRN
參數:所有爲可選,沒有必須
  local_size: 默認爲5。若是是跨通道LRN,則表示求和的通道數;若是是在通道內LRN,則表示求和的正方形區域長度。
  alpha: 默認爲1,歸一化公式中的參數。
  beta: 默認爲5,歸一化公式中的參數。
  norm_region: 默認爲ACROSS_CHANNELS。有兩個選擇,ACROSS_CHANNELS表示在相鄰的通道間求和歸一化。WITHIN_CHANNEL表示在一個通道內部特定的區域內進行求和歸一化。與前面的local_size參數對應。
 
歸一化公式:對於每個輸入, 去除以 ,獲得歸一化後的輸出
 
示例:
layers {
  name: "norm1"
  type: LRN
  bottom: "pool1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}

四、im2col層

若是對matlab比較熟悉的話,就應該知道im2col是什麼意思。它先將一個大矩陣,重疊地劃分爲多個子矩陣,對每一個子矩陣序列化成向量,最後獲得另一個矩陣。

 

看一看圖就知道了:

在caffe中,卷積運算就是先對數據進行im2col操做,再進行內積運算(inner product)。這樣作,比原始的卷積操做速度更快。

看看兩種卷積操做的異同:

相關文章
相關標籤/搜索