前言:本文參考博客denny402
所有的層都具有參數(shù)name, type, bottom, top和類型名_param。
本文只講解視覺層(Vision Layers)的參數(shù),視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。
1、Convolution層:
就是卷積層,是卷積神經(jīng)網(wǎng)絡(luò)(CNN)的核心層。
層類型:Convolution
lr_mult: 學(xué)習(xí)率的系數(shù),最終的學(xué)習(xí)率是這個(gè)數(shù)乘以solver.prototxt配置文件中的base_lr。如果有兩個(gè)lr_mult, 則第一個(gè)表示權(quán)值的學(xué)習(xí)率,第二個(gè)表示偏置項(xiàng)的學(xué)習(xí)率。一般偏置項(xiàng)的學(xué)習(xí)率是權(quán)值學(xué)習(xí)率的兩倍。
在后面的convolution_param中,我們可以設(shè)定卷積層的特有參數(shù)。
必須設(shè)置的參數(shù):
num_output: 卷積核(filter)的個(gè)數(shù)
kernel_size: 卷積核的大小。如果卷積核的長和寬不等,需要用kernel_h和kernel_w分別設(shè)定
其它參數(shù):
stride: 卷積核的步長,默認(rèn)為1。也可以用stride_h和stride_w來設(shè)置。
pad: 擴(kuò)充邊緣,默認(rèn)為0,不擴(kuò)充。 擴(kuò)充的時(shí)候是左右、上下對(duì)稱的,比如卷積核的大小為5*5,那么pad設(shè)置為2,則四個(gè)邊緣都擴(kuò)充2個(gè)像素,即寬度和高度都擴(kuò)充了4個(gè)像素,這樣卷積運(yùn)算之后的特征圖就不會(huì)變小。也可以通過pad_h和pad_w來分別設(shè)定。
weight_filler: 權(quán)值初始化。 默認(rèn)為“constant",值全為0,很多時(shí)候我們用"xavier"算法來進(jìn)行初始化,也可以設(shè)置為”gaussian"
bias_filler: 偏置項(xiàng)的初始化。一般設(shè)置為"constant",值全為0。
bias_term: 是否開啟偏置項(xiàng),默認(rèn)為true, 開啟
group: 分組,默認(rèn)為1組。如果大于1,我們限制卷積的連接操作在一個(gè)子集內(nèi)。如果我們根據(jù)圖像的通道來分組,那么第i個(gè)輸出分組只能與第i個(gè)輸入分組進(jìn)行連接。
輸入:n*c0*w0*h0
輸出:n*c1*w1*h1
其中,c1就是參數(shù)中的num_output,生成的特征圖個(gè)數(shù)
w1=(w0+2*pad-kernel_size)/stride+1;
h1=(h0+2*pad-kernel_size)/stride+1;
如果設(shè)置stride為1,前后兩次卷積部分存在重疊。如果設(shè)置pad=(kernel_size-1)/2,則運(yùn)算后,寬度和高度不變。
示例:
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"
}
}
}
2、Pooling層
也叫池化層,為了減少運(yùn)算量和數(shù)據(jù)維度而設(shè)置的一種層。
層類型:Pooling
必須設(shè)置的參數(shù):
kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分別設(shè)定。
其它參數(shù):
pool: 池化方法,默認(rèn)為MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC
pad: 和卷積層的pad的一樣,進(jìn)行邊緣擴(kuò)充。默認(rèn)為0
stride: 池化的步長,默認(rèn)為1。一般我們?cè)O(shè)置為2,即不重疊。也可以用stride_h和stride_w來設(shè)置。
pooling層的運(yùn)算方法基本是和卷積層是一樣的。
輸入:n*c0*w0*h0
輸出:n*c1*w1*h1
和卷積層的區(qū)別就是其中的c保持不變
w1=(w0+2*pad-kernel_size)/stride+1;
h1=(h0+2*pad-kernel_size)/stride+1;
如果設(shè)置stride為2,前后兩次卷積部分不重疊。100100的特征圖池化后,變成5050.
示例:
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
3、Local Response Normalization (LRN)層
此層是對(duì)一個(gè)輸入的局部區(qū)域進(jìn)行歸一化,達(dá)到“側(cè)抑制”的效果。可去搜索AlexNet或GoogLenet,里面就用到了這個(gè)功能
層類型:LRN
參數(shù):全部為可選,沒有必須
local_size: 默認(rèn)為5。如果是跨通道LRN,則表示求和的通道數(shù);如果是在通道內(nèi)LRN,則表示求和的正方形區(qū)域長度。
alpha: 默認(rèn)為1,歸一化公式中的參數(shù)。
beta: 默認(rèn)為5,歸一化公式中的參數(shù)。
norm_region: 默認(rèn)為ACROSS_CHANNELS。有兩個(gè)選擇,ACROSS_CHANNELS表示在相鄰的通道間求和歸一化。WITHIN_CHANNEL表示在一個(gè)通道內(nèi)部特定的區(qū)域內(nèi)進(jìn)行求和歸一化。與前面的local_size參數(shù)對(duì)應(yīng)。
,得到歸一化后的輸出