将数据转换为leveldb以获取caffe

时间:2015-06-05 10:10:32

标签: matlab caffe conv-neural-network leveldb matcaffe

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

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

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

1 个答案:

答案 0 :(得分:6)

我仍然不知道在caffe中使用我的2D数据矩阵的leveldb数据库,但我终于解决了问题:
我最终使用Shai's proposal将数据转换为HDF5格式。在Matlab中读取和编写HDF5数据库非常容易。您只需使用已在Matlab中实现的函数hdf5info()h5read()h5create()h5write()

示例:
- 将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
  }
}

使用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);
  • 如您所见,caffe期望hdf5数据库包含变量“data”和“label”
  • 阅读数据库:
    使用hdf5info(filename)获取hdf5数据库中的数据集名称。 然后使用data = h5read(filename,dataset)读取数据集