我认为将数据从 Matlab 传输到 caffe 最直接的方法是通过 HDF5 文件。
首先,使用hdf5write 将 Matlab 中的数据保存在 HDF5 文件中。我假设您的训练数据存储在大小为 300×30 的变量名称 X 中,而标签存储在 y 一个 300×1 向量中:
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。
为什么是permute?解释请见this answer。
您还需要准备一个文本文件,列出您正在使用的所有 hdf5 文件的名称(在您的情况下,只有 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输入层的更多信息,您可以查看this answer。