一:数据层及参数
caffe层次有许多类型,比如Data,Covolution,Pooling,层次之间的数据流动是以blobs的方式进行
首先,我们介绍数据层:
数据层是每个模型的最底层,是模型的入口,通常数据的 预处理(如去均值,放大缩小,裁剪和镜像等)也在这一层设置参数实现。
数据来源一般来自高效的数据库(levelDb和LMDB),也可以来自内存,如果注重效率,可以来自磁盘的hdf5文件和图片格式文件。
层次实例如下:
1 layer{ 2 name:"cifar" 3 type: "Data" 4 top: "data" 5 top: "label" 6 include{ 7 phase:TRAIN 8 } 9 transform_param{ 10 mean_file: "examples/cifar10/mean.binaryproto" 11 } 12 data_param{ 13 source: "examples/cifar10/cifar10_train_lmdb" 14 batch_size: 100 15 backend:LMDB 16 } 17 }
层次参数解释:
name : 表示该层的名称,可以随意取
type : 层类型,如果是Data,表示数据来源于LevelDB或者LMDB。一般采用这两种数据
top/bottom: 每一层用bottom来表述输入数据,top表述输出数据。如果只有top没有bottom,则此层只有输出没有输入,反之亦然。如果有多个top或bottom,表述有多个blobs数据的输入和输出。
data/label:在数据层中,至少有一个命名为data的top。如果两个top,一般命名为label,(data,label)配对是分类模型所必须的。
include:一般训练和测试的测试的时候,模型的层不一样。include用以区分是train还是test,如果没有include表述该层既做训练也做测试。
Transformations:数据的预处理,可以对数据进行变换,scale为0.00390625,实际上是1/255,既数据的归一化。
1 transform_param{ 2 scale = 0.00390625 3 mane_file_size: "examples/cifar10/mean.binaryproto" 4 //用一个配置文件来进行去均值操作 5 mirror:1 //1表示开启镜像,0表示关闭,也可以用true和false表示 6 //剪裁一个277*277的图块,在训练阶段随机裁剪,在测试阶段从中间剪裁 7 crop_size: 227 8 }