一般来说,激活层执行逐个元素的操作, 输入一个底层 blob, 输出一个尺寸相同的顶层 blob。 在以下列出的这些层中,我们将忽略输入和输出 blob 的尺寸,因为它们是相同的:
- 输入: n * c * h * w
- 输出: n * c * h * w
ReLU / Rectified-Linear and Leaky-ReLU
- 层类型: ReLU
- CPU 实现代码: ./src/caffe/layers/relu_layer.cpp
- CUDA GPU 实现代码: ./src/caffe/layers/relu_layer.cu
参数:
Optional(可选的)
- negative_slope [default 0]: 设置激活函数在负数部分的斜率(默认为 0), 对输入数据小于零的部分乘以这个因子,斜率为 0 时,小于零的部分完全滤掉。
例子( ./models/bvlc_reference_caffenet/train_val.prototxt)
layer {
name: "relu1"
type: "ReLU"
bottom: "conv1"
top: "conv1"
}
name: "relu1"
type: "ReLU"
bottom: "conv1"
top: "conv1"
}
给定一个输入数据, 当 x > 0 时, ReLU 层的输出为 x, 当 x <= 0 时, 输出为negative_slope * x。
当negative_slope未指定时,等同于标准的ReLU函数max(x, 0),该层也支持原(址 in-place)计算, 即它的底层 blob 和顶层 blob 可以是同一个以节省内存开销。
Sigmoid
The Sigmoid 层使用 sigmoid(x)函数计算每个输入数据的输出
- 层类型: Sigmoid
- CPU 实现代码: ./src/caffe/layers/sigmoid_layer.cpp
- CUDA GPU 实现代码: ./src/caffe/layers/sigmoid_layer.cu
例子( ./examples/mnist/mnist_autoencoder.prototxt)
layer {
name: "encode1neuron"
bottom: "encode1"
top: "encode1neuron"
type: "Sigmoid"
}
name: "encode1neuron"
bottom: "encode1"
top: "encode1neuron"
type: "Sigmoid"
}
TanH / Hyperbolic Tangent
The TanH 层使用 tanh(x)函数计算每个输入数据 x 的输出
- 层类型: TanH
- CPU 实现代码: ./src/caffe/layers/tanh_layer.cpp
- CUDA GPU 实现代码: ./src/caffe/layers/tanh_layer.cu
例子
layer {
name: "layer"
bottom: "in"
top: "out"
type: "TanH"
}
name: "layer"
bottom: "in"
top: "out"
type: "TanH"
}
Absolute Value
The AbsVal 层使用 abs(x)函数计算每个输入数据 x 的输出
- 层类型: AbsVal
- CPU 实现代码: ./src/caffe/layers/absval_layer.cpp
- CUDA GPU 实现代码: ./src/caffe/layers/absval_layer.cu
例子
layer {
name: "layer"
bottom: "in"
top: "out"
type: "AbsVal"
}
name: "layer"
bottom: "in"
top: "out"
type: "AbsVal"
}
Power
The Power 层使用函数(shift + scale * x) ^ power 计算每个输入数据 x 的输出
- 层类型: Power
- CPU 实现代码: ./src/caffe/layers/power_layer.cpp
- CUDA GPU 实现代码: ./src/caffe/layers/power_layer.cu
参数:
Optional(可选的)
- power [default 1]
- scale [default 1]
- shift [default 0]
例子
layer {
name: "layer"
bottom: "in"
top: "out"
type: "Power"
power_param {
power: 1
scale: 1
shift: 0
}
}
name: "layer"
bottom: "in"
top: "out"
type: "Power"
power_param {
power: 1
scale: 1
shift: 0
}
}
BNLL
The BNLL 层使用函数 log(1 + exp(x))计算每个输入数据 x 的输出。
- 层类型: BNLL
- CPU 实现代码: ./src/caffe/layers/bnll_layer.cpp
- CUDA GPU 实现代码: ./src/caffe/layers/bnll_layer.cu
例子
layer {
name: "layer"
bottom: "in"
top: "out"
type: BNLL
}
name: "layer"
bottom: "in"
top: "out"
type: BNLL
}