我认为将数据从Matlab传输到caffe的最直接的方法是通过HDF5文件。
首先,使用Matlab将数据保存在HDF5文件中 hdf5write 。我假设您的训练数据存储在变量名称中 X 尺寸为300×30,标签存放在 y 一个300乘1的向量:
hdf5write
X
y
hdf5write('my_data.h5', '/X', single( permute(reshape(X,[300, 30, 1, 1]),[4:-1:1]) ) ); hdf5write('my_data.h5', '/label', single( permute(reshape(y,[300, 1, 1, 1]),[4:-1:1]) ), 'WriteMode', 'append' );
请注意,数据保存为4D数组:第一个维度是要素数量,第二个维度是要素的维度,后两个是1(表示无空间维度)。另请注意,HDF5中的数据名称是 "X" 和 "label" - 这些名称应该用作 "top" 输入数据层的blob。
"X"
"label"
"top"
为什么 permute ?请参阅 这个答案 作出解释。
permute
您还需要准备一个文本文件,列出您正在使用的所有hdf5文件的名称(仅在您的情况下) my_data.h5 )。文件 /path/to/list/file.txt 应该有一条线
my_data.h5
/path/to/list/file.txt
/path/to/my_data.h5
现在,您可以将输入数据层添加到train_val.prototxt
layer { type: "HDF5Data" name: "data" top: "X" # note: same name as in HDF5 top: "label" # hdf5_data_param { source: "/path/to/list/file.txt" batch_size: 20 } include { phase: TRAIN } }
有关hdf5输入图层的更多信息,请参阅 这个答案 。