我仍然不知道如何创建一个适用于caffe的2D数据矩阵的leveldb数据库,但我最终解决了我的问题:
我最终使用了
Shai的建议将数据转换为HDF5格式。在Matlab中读写HDF5数据库非常容易。您只需要使用已经实现在Matlab中的函数
hdf5info()
,
h5read()
,
h5create()
和
h5write()
即可。
示例:
- 在caffe的prototxt文件中更改数据类型为"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(#行x列)的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 期望使用具有“data”和“label”变量的 hdf5 数据库
- 读取数据库:
使用 hdf5info(filename)
来获取 hdf5 数据库中的数据集名称。
然后使用 data = h5read(filename,dataset)
读取数据集