标签:
CUDA、GPU实现: ./src/caffe/layers/tanh_layer.cu
例子
layer { name: "layer" bottom: "in" top: "out" type: "TanH" }
对于每一个输入值x,TanH layer的输出为tanh(x)。
CUDA、GPU实现: ./src/caffe/layers/absval_layer.cu
例子
layer { name: "layer" bottom: "in" top: "out" type: "AbsVal" }
对于每一个输入值x,AbsVal layer的输出为abs(x)。
参数 (power_param):
例子
layer { name: "layer" bottom: "in" top: "out" type: "Power" power_param { power: 1 scale: 1 shift: 0 } }
对于每一个输入值x,Power layer的输出为(shift + scale * x) ^ power。
layer { name: "layer" bottom: "in" top: "out" type: BNLL }
对于每一个输入值x,BNLL layer的输出为log(1 + exp(x))。
Data 通过Data Layers进入Caffe,Data Layers位于Net的底部。
Data 可以来自:1、高效的数据库(LevelDB 或 LMDB);2、内存;3、HDF5或image文件(效率低)。
基本的输入预处理(例如:减去均值,缩放,随机裁剪,镜像处理)可以通过指定TransformationParameter达到。
Memory Data Layer从内存直接读取数据(而不是复制数据)。使用Memory Data Layer之前,必须先调用,MemoryDataLayer::Reset(C++方法)或Net.set_input_arrays(Python方法)以指定一个source来读取一个连续的数据块(4D,按行排列),每次读取大小由batch_size决定。
参数:
HDF5 output layer与这部分的其他layer的功能正好相反,不是读取而是写入。
DummyData 用于开发和测试,详见DummyDataParameter(没有给出链接)。
参数 (inner_product_param):
输入(Input)
输出(Output)
例子
layer { name: "fc8" # 名称:fc8 type: "InnerProduct" # 类型:全连接层 # 权重(weights)的学习速率因子和衰减因子 param { lr_mult: 1 decay_mult: 1 } # 偏置项(biases)的学习速率因子和衰减因子 param { lr_mult: 2 decay_mult: 0 } inner_product_param { num_output: 1000 # 1000个滤波器(filters) weight_filler { type: "gaussian" # 初始化高斯滤波器(Gaussian) std: 0.01 # 标准差为0.01, 均值默认为0 } bias_filler { type: "constant" # 初始化偏置项(bias)为零 value: 0 } } bottom: "fc7" # 输入层:fc7 top: "fc8" # 输出层:fc8 }
InnerProduct layer(常被称为全连接层)将输入视为一个vector,输出也是一个vector(height和width被设为1)
Split layer用于将一个输入的blob分离成多个输出的blob。这用于当需要将一个blob输入至多个输出layer时。
Flatten layer用于把一个维度为n * c * h * w的输入转化为一个维度为 n * (c*h*w)的向量输出。
参数 (reshape_param):
输入(Input)
输出(Output)
例子
layer { name: "reshape" # 名称:reshape type: "Reshape" # 类型:Reshape bottom: "input" # 输入层名称:input top: "output" # 输出层名称:output reshape_param { shape { dim: 0 # 这个维度与输入相同 dim: 2 dim: 3 dim: -1 # 根据其他维度自动推测 } } }
Reshape layer只改变输入数据的维度,但内容不变,也没有数据复制的过程,与Flatten layer类似。
输出维度由reshape_param 指定,正整数直接指定维度大小,下面两个特殊的值:
再举一个例子:如果指定reshape_param参数为:{ shape { dim: 0 dim: -1 } } ,那么输出和Flattening layer的输出是完全一样的。
参数 (concat_param):
输入(Input)
-n_i * c_i * h * w for each input blob i from 1 to K.(第i个blob的维度是n_i * c_i * h * w,共K个)
输出(Output)
例子
layer { name: "concat" bottom: "in1" bottom: "in2" top: "out" type: "Concat" concat_param { axis: 1 } }
Concat layer用于把多个输入blob连结成一个输出blob。
Slice layer用于将一个input layer分割成多个output layers,根据给定的维度(目前只能指定num或者channel)。
layer { name: "slicer_label" type: "Slice" bottom: "label" ## 假设label的维度是:N x 3 x 1 x 1 top: "label1" top: "label2" top: "label3" slice_param { axis: 1 # 指定维度为channel slice_point: 1 # 将label[~][1][~][~]赋给label1 slice_point: 2 # 将label[~][2][~][~]赋给label2 # 将label[~][3][~][~]赋给label3 } }
axis表明是哪一个维度,slice_point是该维度的索引,slice_point的数量必须是top blobs的数量减1.
标签:
原文地址:http://www.cnblogs.com/Allen-rg/p/5844650.html