Caffe Layer

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之经典模型详解与实战》

猜你喜欢

转载自blog.csdn.net/juluwangriyue/article/details/115101331