Caffe學習系列:啟用層(Activiation Layers)及引數
在啟用層中,對輸入資料進行啟用操作(實際上就是一種函式變換),是逐元素進行運算的。從bottom得到一個blob資料輸入,運算後,從top輸入一個blob資料。在運算過程中,沒有改變資料的大小,即輸入和輸出的資料大小是相等的。
輸入:n*c*h*w
輸出:n*c*h*w
常用的啟用函式有sigmoid, tanh,relu等,下面分別介紹。
1、Sigmoid
對每個輸入資料,利用sigmoid函式執行操作。這種層設定比較簡單,沒有額外的引數。
層型別:Sigmoid
示例:
layer { name: "encode1neuron" bottom: "encode1" top: "encode1neuron" type: "Sigmoid" }
2、ReLU / Rectified-Linear and Leaky-ReLU
ReLU,又叫修正線性單元,是目前使用最多的啟用函式,主要因為其收斂更快,計算簡單,並且能保持同樣效果,該啟用函數出自2012Alexnet。
標準的ReLU函式為max(x, 0),當x>0時,輸出x; 當x<=0時,輸出0
f(x)=max(x,0)
層型別:ReLU
可選引數:
negative_slope:預設為0. 對標準的ReLU函式進行變化,如果設定了這個值,那麼資料為負數時,就不再設定為0,而是用原始資料乘以negative_slope。
layer { name: "relu1" type: "ReLU" bottom: "pool1" top: "pool1" }
RELU層支援in-place計算,這意味著bottom的輸出和輸入相同以避免記憶體的消耗。
3、TanH / Hyperbolic Tangent
利用雙曲正切函式對資料進行變換。
層型別:TanH
layer {
name: "layer"
bottom: "in"
top: "out"
type: "TanH"
}
4、Absolute Value
求每個輸入資料的絕對值。
f(x)=Abs(x)
層型別:AbsVal
layer { name: "layer" bottom: "in" top: "out" type: "AbsVal" }
5、Power
對每個輸入資料進行冪運算
f(x)= (shift + scale * x) ^ power
層型別:Power
可選引數:
power: 預設為1
scale: 預設為1
shift: 預設為0
layer {
name: "layer"
bottom: "in"
top: "out"
type: "Power"
power_param {
power: 2
scale: 1
shift: 0
}
}
6、BNLL
binomial normal log likelihood的簡稱
f(x)=log(1 + exp(x))
層型別:BNLL
layer {
name: "layer"
bottom: "in"
top: "out"
type: “BNLL”
}