1、Caffe Layer
Layer时Caffe模型的本质内容和执行计算的基本单元,可进行多种运算,如convolve(卷积)、pool(池化)、innerproduct(内积)、rectified-linear和sigmoid等非线性运算,还有元素级的数据变换、normoalize(归一化)、load data(数据加载)、softmax和hinge等lossses(损失计算)。在Caffe的Layer catealogue层目录中可以查看所有的操作,也可以查看到绝大部分目前最前沿的深度学习任务的层类型。
一个典型的Caffe层结构如下。一个Layer通过bottom连接层接收数据,通过top连接层输出数据。每个Layer都定义了三种重要运算:setup(初始化设置)、forward(前向传播)、backward(反向传播)。
- setup:在模型初始化时重置layers及相互之间的链接;
- forawrd:从bottom层中接收数据,计算后将输出送到top层;
- backward:给定top层的输出梯度,计算其输入的梯度,并传递到bottom层。一个有参数的layer需要计算相对于各个参数的梯度置并存储在内部。
总之,Layer承担了网络的两个核心操作:forward pass (前向传播)接受输入并计算输出;backward pass (反向传播)接收输出梯度,计算相对于参数和输入梯度并反向传播给前面的层。这一过程组成了每个layer的前向和反向通道。
Caffe网络的定义和代码实现具有高度的模块化,因此自定义layer相对容易,一般只要定义好layer的setup(初始化设置)、forawrd(前向通道)和backward(反向通道),就可以将此layer加入到Caffe网络中。
1.1、Data Layers
Caffe的数据层Data Layer处于网络的最底层,数据可以从高效率的数据库中读取,也可以直接从内存中读取,或者从磁盘中存储的文件中读取。
Data Layer需要对数据进行预处理操作,常见的操作又监军之、尺度变换、随机裁剪或者镜像等。这些操作可以通过设定参数Transformation Parameter来实现。
示例如下:
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "F:/caffe_ocr-master/examples/mnist/mnist_train_lmdb"
batch_size: 64
backend: LMDB
}
}
1.2、Convolution Layers
- 层类型:Convolution
- CPU实现代码:src/caffe/layers/convolution_layer.cpp
- CUDA GPU实现代码:src/caffe/layers.convolution_layer.cu
- 参数:
num-output | 指定卷积核数量 | 必填 |
kernel_size | 指定卷积核的高度和宽度 | 必填 |
weight_filter | 指定参数的初始化方案 | 可选 |
bias_term | 指定是否给卷积输出添加偏置项,默认true | 可选 |
pad | 指定在输入图像周围补0的像素个数,默认为0 | 可选 |
stride | 指定卷积核在输入图像上滑动的步长,默认为1 | 可选 |
group | 指定分组卷积操作的组数,默认1 | 可选 |
输入输出只存计算:
1.3、Pooling Layers
1.4、InnerProduct Layers
1.5、ReLU Layers
1.6、Sigmoid Layers
1.7、LRN Layers
1.8、Dropout Layers
1.9、 SoftmaxWithLoss Layers
1.10、Softmax Layers
1.11、 Accuracy Layers
参考:《深度学习——Caffe之经典模型详解与实战》