本文主要分析caffe
layer
层,主要内容如下:
-
从整体上说明下
caffe
的layer层的类别,以及作用 -
通过proto定义与类Layer简要说明下Layer的核心成员变量;
-
Layer类的核心成员函数
1. 类Layer overview
caffe中的Layer主要分为如下几个模块:
- 输入层Data Layers
Data Layers定义了caffe中网络的输入,依赖于高效的数据库,例如(LevelDB or LMDB)。并且可以对数据做预处理,例如mean subtraction, scaling, random cropping, mirroring。
常用的有:Input, ImageData.
-
Vision Layers层(卷积相关)例如,卷积层Convolution Layer, 池化层Pooling Layer等
-
循环网络层Recurrent Layers 例如,LSTM, RNN等。
-
Common Layers例如,Inner Product 全连接层,Dropout弃权层,等。
-
Normalization Layers(归一化层)例如Local Response Normalization (LRN), Batch Normalization 。
-
Activation / Neuron Layers(激活层),例如ReLU, Sigmoid等。
-
Utility Layers, 例如Flatten, Reshape等。
-
Loss Layers, 例如Sigmoid Cross-Entropy Loss, Sum-of-Squares / Euclidean等。
layer.hpp: 父类Layer,定义所有layer的基本接口。
data_layers.hpp: 继承自父类Layer,定义与输入数据操作相关的子Layer,例如DataLayer,HDF5DataLayer和ImageDataLayer等。
vision_layers.hpp: 继承自父类Layer,定义与特征表达相关的子Layer,例如ConvolutionLayer,PoolingLayer和LRNLayer等。
neuron_layers.hpp: 继承自父类Layer,定义与非线性变换相关的子Layer,例如ReLULayer,TanHLayer和SigmoidLayer等。
loss_layers.hpp: 继承自父类Layer,定义与输出误差计算相关的子Layer,例如EuclideanLossLayer,SoftmaxWithLossLayer和HingeLossLayer等。
common_layers.hpp: 继承自父类Layer,定义与中间结果数据变形、逐元素操作相关的子Layer,例如ConcatLayer,InnerProductLayer和SoftmaxLayer等。
layer_factory.hpp: Layer工厂模式类,负责维护现有可用layer和相应layer构造方法的映射表。
每个Layer根据自身需求的不同,会定义CPU或GPU版本的实现,例如ConvolutionLayer的CPU和GPU实现就定义在了两个文件中conv_layer.cpp, conv_layer.cu.
2. 通过proto定义与类Layer简要说明下Layer的核心成员变量
proto的LayerParameter核心参数如下,除了基础的参数外还有其他的继承类如:ConvolutionParameter额外参数。
// LayerParameter next available layer-specific ID: 145 (last added: crop_param)
message LayerParameter {
optional string name = 1; // the layer name
optional string type =