我在Matlab中有一堆二维数据矩阵(没有图像数据,但有一些单精度数据)。
有没有人知道如何将2D matlab矩阵转换为caffe培训自定义神经网络所需的leveldb格式?
我已经完成了关于如何训练图像(使用imagenet架构)和mnist(数字识别数据集)的教程。但是在后一个例子中,他们没有展示如何创建相应的数据库。在教程中已经提供了数据库。
答案 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);
hdf5info(filename)
获取hdf5数据库中的数据集名称。
然后使用data = h5read(filename,dataset)
读取数据集