caffe HDF5 Data

来源:互联网 发布:桌面总是出现精选淘宝 编辑:程序博客网 时间:2024/06/08 12:25

作者:hu magic
链接:https://www.zhihu.com/question/53296707/answer/139641037
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

已经通过 使用HDF5Data做输入 ,加入slice layer,构建五个小分类器 解决了这个问题,效果也还可以。

!!!如果有小伙伴遇到了类似的问题,又无从下手的话,私信我,我把我的具体流程和代码告诉你。

----------------------------------------------------------------------------------------------------

发现有很多小伙伴都遇到了这个问题。。。作此补充。

1.HDF5文件的生成

参考这篇博客:caffe HDF5Data 层使用及数据生成

2.网络结构

参考这篇博客:Caffe中HDF5Data例子 - from_jiarenyf - 博客频道 - CSDN.NET

3.我的prototxt文件

到此下载:多分类caffe代码 - 下载频道 - CSDN.NET

-----------------------------------

基本框架,如下图所示。



有些时候,我们的输入不是标准的图像,而是其它一些格式,比如:频谱图、特征向量等等,这种情况下LMDB、Leveldb以及ImageData layer等就不好使了,这时候我们就需要一个新的输入接口——HDF5Data.

(1) 在Matlab中生成HDF5文件

这里直接以例子的形式说明如何生成:

问题:输入data是512*1的矢量,共1000个样本,label是标量。

代码如下:

% 创建HDF5文件,包含data和label两个变量,数据类型是caffe支持的float型数据h5create('train.h5','/data',[1 1 512 1000],'Datatype','single');h5create('train.h5','/label',[1 1 1 1000],'Datatype','single');%reshape: width x height x channels x num,注意MATLAB读数据是列优先,是和C++里面相反的。所以写数据的时候也要倒着写。train_data  = reshape(train_data,[1 1 512 1000]);train_label = reshape(train_label,[1 1 1 1000]);h5write('train.h5' ,'/data' , single(train_data));h5write('train.h5' ,'/label', single(train_label));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

关于HDF5在MATLAB里面的的其它用法,比如从指定位置开始写等等,请参照MATLAB文档。

(2) caffe中HDF5层的用法

注意:由于单个HDF5文件大小有限制,MATLAB下好像最大只能生成5G大小的文件,因此当我们的训练数据较多的时候,往往需要将数据分别写入多个H5文件中。

下面直接给出caffe中HDF5Data-layer的使用示例:

layer {  name: "data"  type: "HDF5Data"  top: "data"  top: "label"  include {    phase: TRAIN  }  hdf5_data_param {  source: "train.txt"  batch_size: 128  shuffle: true  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

由于可能存在多个H5文件,所以HDF5Data的输入是从一个TXT文件读取的列表,train.txt内容示例如下:

train1.h5train2.h5...
  • 1
  • 2
  • 3

还需要注意,shuffle是对H5文件进行乱序,而每个H5文件内部的顺序不动。

原创粉丝点击