caffe的代码层次
首先让我们回顾一下caffe的代码层次: blob,layer, net和solver.
其中blob是数据结构, layer是网络的层, net是将layer搭建成的网络,solver是网络BP时候的求解算法. 本节主要介绍caffe的layer基本结构, 种类, 以及不同类型的layer如何定义.
layer的基本结构和种类
Caffe的layer的基本结构:
Layer{
name: "xx" # 名称
type: "xx" # 类型
top: "xx" # 输出
bottom: "xx" # 输入
some_param { # 其他参数定义等
...
}
}
从一个典型的卷积神经网络模型结构出发, 首先需要数据输入层,然后是图像的预处理,例如图像切割slice, 卷积层Convolution, 在caffe中,激活函数等数据运算也用layer的方式定义. 总的来说,caffe的layer种类如下:
- 数据输入层:
- 视觉层(Vision Layers): 包括Convolution, Pooling, Local Response Normalization (LRN), im2col等
- 损失层: softmax-loss层, Euclidean层.
- 循环层: RNN, LSTM层等.
- 工具层(Utility layer): 例如reshape层, concat层等
- 普通层(Common layer): dropout层, 全连接层, embed层.
数据输入层:
一个常见的数据输入层定义如下. 输入数据定义为lmdb数据库格式.
layer {
name: "data"
type: "CPMData"
top: "data"
top: "label"
data_param {
source: "/home/zhecao/COCO_kpt/lmdb_trainVal" # lmdb数据文件路径
batch_size: 10
backend: LMDB
}
cpm_transform_param { # 图片预处理
stride: 8
max_rotate_degre