您的位置:首页 > Web前端

Caffe学习(2)——caffe中的数据层及对应参数

2017-03-12 17:07 295 查看
Caffe的运行,首先要基于一个模型(model),比较常用的模型有Lenet、AlexNet、VGG等;一个模型有多个层构成,层有许多种类型,比如数据层(Data Layers)、视觉层(Vision Layers)、激活层(Activation Layers)等,每层对应着许多参数,这些参数都定义在caffe.proto这个配置文件中。

接下来我们先介绍一下数据层。

数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从Blobs转换成其他格式进行保存输出。通常,数据的预处理(如减去均值、放大缩小、裁剪和镜像)即在这一层实现,参数设置也在这一层实现。

数据来源可以来自高效的数据库(如LevelDB、LMDB),也可以来自内存。如果不是很注重效率的话,数据也可来自磁盘的hdf5文件和图片格式文件。

这里说明一下我们常用的LevelDB和LMDB的区别:

——LevelDB

利用层表方式组织数据,优化写入速度

优点:为写入进行优化,并进行压缩

缺点:写入太频繁时,来不及重写,磁盘会爆掉

——LMDB

利用map直接进行映射,尽量少进行内存拷贝(可以为只读,直接返回引擎中的内存),提高读性能;

利用tree方式组织数据,并且和系统虚拟内存页大小一致的页进行文件组织

优点:专门进行读优化

缺点:和系统页一样大的组织方式(4k),如果单条Record为1k,则浪费严重

这里给出一个示例进行参数讲解:

layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "H:/win10-caffe/Caffe_BVLC/examples/mnist/mnist-train-leveldb"
batch_size: 64
backend: LEVELDB
}
}
其中,name:表示该层的名称,可随意取;

type:层类型,Data表示数据来源于LevelDB或LMDB;MemoryData表示数据来源于内存;HDF5Data表示数据来源于HDF5,ImageData表示数据来源于图片,Window表示数据来源于Windows。根据数据来源的不同,数据层的类型也不同,一般来说,我们采用的多为LevelDB或LMDB,所以层类型一般设置为Data;

top或bottom:bottom表示输入数据,top表示输出数据,如果只有top没有bottom,则表示该层只有输出,没有输入,反之亦然。若果有多个bottom,则表示有多个blobs数据的输入和输出;

include:用于指出该层是训练阶段的层还是测试阶段的层;

transform_param:数据的预处理,可以将数据变换到定义的范围内;如设置scale为00390625,实际上就是1/255,也就是将输入数据由0-255归一化到0-1之间。

data_param:根据数据的来源,进行相应的设置:source——包含数据库的目录名;batch_size——每次处理的数据个数;backen:选择采用的数据库来源。

最后说一句,数据来源不同,参数也不同,一般参数都可望名生意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息