所有的層都具有的參數,如name, type, bottom, top和transform_param請參看我的前一篇文章:Caffe學習系列(1):資料層及參數
本文隻講解視覺層(Vision Layers)的參數,視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。
1、Convolution層:
就是卷積層,是卷積神經網絡(CNN)的核心層。
層類型:Convolution
在後面的convolution_param中,我們可以設定卷積層的特有參數。
必須設定的參數:
num_output: 卷積核(filter)的個數
kernel_size: 卷積核的大小。如果卷積核的長和寬不等,需要用kernel_h和kernel_w分别設定
其它參數:
stride: 卷積核的步長,預設為。也可以用stride_h和stride_w來設定。
pad: 擴充邊緣,預設為,不擴充。 擴充的時候是左右、上下對稱的,比如卷積核的大小為*,那麼pad設定為,則四個邊緣都擴充個像素,即寬度和高度都擴充了個像素,這樣卷積運算之後的特征圖就不會變小。也可以通過pad_h和pad_w來分别設定。
weight_filler: 權值初始化。 預設為“constant",值全為0,很多時候我們用"xavier"算法來進行初始化,也可以設定為”gaussian"
bias_filler: 偏置項的初始化。一般設定為"constant",值全為。
bias_term: 是否開啟偏置項,預設為true, 開啟
group: 分組,預設為組。如果大于,我們限制卷積的連接配接操作在一個子集内。如果我們根據圖像的通道來分組,那麼第i個輸出分組隻能與第i個輸入分組進行連接配接。
輸入:n*c0*w0*h0
輸出:n*c1*w1*h1
其中,c1就是參數中的num_output,生成的特征圖個數
w1=(w+*pad-kernel_size)/stride+;
h1=(h+*pad-kernel_size)/stride+;
如果設定stride為,前後兩次卷積部分存在重疊。如果設定pad=(kernel_size-)/,則運算後,寬度和高度不變。
示例:
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult:
}
param {
lr_mult:
}
convolution_param {
num_output:
kernel_size:
stride:
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
這個連結解釋了激活函數層,及激活函數的選擇。https://www.cnblogs.com/denny402/p/5072507.html
2、Pooling層
也叫池化層,為了減少運算量和資料次元而設定的一種層。
層類型:Pooling
必須設定的參數:
kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分别設定。
其它參數:
pool: 池化方法,預設為MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC
pad: 和卷積層的pad的一樣,進行邊緣擴充。預設為
stride: 池化的步長,預設為。一般我們設定為,即不重疊。也可以用stride_h和stride_w來設定。
示例:
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size:
stride:
}
}
pooling層的運算方法基本是和卷積層是一樣的。
輸入:n*c*w0*h0
輸出:n*c*w1*h1
和卷積層的差別就是其中的c保持不變
w1=(w+*pad-kernel_size)/stride+;
h1=(h+*pad-kernel_size)/stride+;
如果設定stride為,前後兩次卷積部分不重疊。*100的特征圖池化後,變成*50.
3、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:
alpha:
beta:
}
}
4、im2col層
如果對matlab比較熟悉的話,就應該知道im2col是什麼意思。它先将一個大矩陣,重疊地劃分為多個子矩陣,對每個子矩陣序列化成向量,最後得到另外一個矩陣。
圖檔複制不過來,看原博。
本文轉載自:
http://www.cnblogs.com/denny402/p/5071126.html