将数据转换为leveldb以获取caffe

mcE*_*nge 7 matlab leveldb caffe conv-neural-network matcaffe

我在Matlab中有一堆二维数据矩阵(没有图像数据,但有一些单精度数据).

有谁知道如何将2D matlab矩阵转换为caffe所需的leveldb格式来训练自定义神经网络?

我已经完成了关于如何训练图像(使用imagenet架构)和mnist(数字识别数据集)的教程.但是在后一个例子中,他们没有展示如何创建相应的数据库.在教程中,已经提供了数据库.

mcE*_*nge 6

我仍然不知道创建一个我的2D数据矩阵的leveldb数据库用于caffe但我最终解决了问题:
我最终使用Shai的提议将数据转换为HDF5格式.在Matlab中读取和编写HDF5数据库非常容易.你只需要使用的功能hdf5info(),h5read(),h5create()并且h5write()这是在Matlab已经实施.

示例:
- 将caffe原型文件中的数据类型更改为"hdf5layer",如下所示:

name: "LeNet"
layer {
  name: "mnist"
  type: "HDF5Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  hdf5_data_param {
    source: "/path/to/your/database/myMnist_train.txt"
    batch_size: 64
  }
}
Run Code Online (Sandbox Code Playgroud)

使用Matlab创建HDF5数据库:
- Caffe:您的输入训练数据必须是4-D矩阵,其中最后两个维度等于matlab中2D输入数据矩阵的大小.
- 示例:采用大小为54x24(#rows x cols)的2d矩阵(图像或单精度数据)
- - >转置它,并将其堆叠成24x54x1xN矩阵,其中N是2d矩阵的数量(训练样本)
-标签位于matlab中的1xN行向量中.
- 现在创建你的hdf5数据库:

h5create(['train.h5'],'/data',[24 54 1 length(trainLabels)]);
h5create(['train.h5'],'/label',[1 length(trainLabels)]);
h5write(['train.h5'],'/data',trainData);
h5write(['train.h5'],'/label',trainLabels);
Run Code Online (Sandbox Code Playgroud)
  • 如您所见,caffe期望hdf5数据库具有变量"data"和"label"
  • 读取数据库:
    使用hdf5info(filename)获得HDF5数据库中的数据集名称.然后data = h5read(filename,dataset)用来读取数据集