一.数据层及参数
要运行 caffe,需要先创建一个模型(model),如比较常用的 Lenet,Alex 等, 而一个模
型由多个屋(layer)构成,每一屋又由许多参数组成。所有的参数都定义在 caffe.proto 这个
文件中。要熟练使用 caffe,最重要的就是学会配置文件(prototxt)的编写。
层有很多种类型,比如 Data,Convolution,Pooling 等,层之间的数据流动是以 Blobs 的方
式进行。
今天我们就先介绍一下数据层.
数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从 Blobs
转换成别的格式进行保存输出。通常数据的预处理(如减去均值, 放大缩小, 裁剪和镜像等),
也在这一层设置参数实现。
数据来源可以来自高效的数据库(如 LevelDB 和 LMDB),也可以直接来自于内存。如
果不是很注重效率的话,数据也可来自磁盘的 hdf5 文件和图片格式文件。
所有的数据层的都具有的公用参数:先看示例
layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mean_file: "examples/cifar10/mean.binaryproto"
}
data_param {
source: "examples/cifar10/cifar10_train_lmdb"
batch_size: 100
backend: LMDB
}
}
name: 表示该层的名称,可随意取
type: 层类型,如果是 Data,表示数据来源于 LevelDB 或 LMDB。根据数据的来源不同,
数据层的类型也不同(后面会详细阐述)。一般在练习的时候,我们都是采用的 LevelDB 或
LMDB 数据,因此层类型设置为 Data。
top 或 bottom: 每一层用 bottom 来输入数据,用 top 来输出数据。如果只有 top 没有
bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top 或多个 bottom,表示有
多个 blobs 数据的输入和输出。
data 与 label: 在数据层中,至少有一个命名为 data 的 top。如果有第二个 top,一般命
名为 label。 这种(data,label)配对是分类模型所必需的。
include: 一般训练的时候和测试的时候,模型的层是不一样的。该层(layer)是属于训练
阶段的层,还是属于测试阶段的层,需要用 include 来指定。如果没有 include 参数,则表示
该层既在训练模型中,又在测试模型中。
Transformations: 数据的预处理,可以将数据变换到定义的范围内。如设置 scale 为