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

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:选择采用的数据库来源。


最后说一句,数据来源不同,参数也不同,一般参数都可望名生意。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值