Конвертировать данные в leveldb для кафе
У меня есть куча 2D-матриц данных в Matlab (нет данных изображения, но есть данные с одинарной точностью).
Кто-нибудь знает, как преобразовать 2D матрицы Matlab в формат Leveldb, который требуется Caffe для обучения пользовательской нейронной сети?
Я уже делал учебник о том, как тренироваться на изображениях (используя архитектуру imagenet) и на mnist (набор данных для распознавания цифр). Однако в последнем примере они не показали, как создать соответствующую базу данных. В учебнике база данных уже была предоставлена.
1 ответ
Я до сих пор не знаю, как создать базу данных leveldb моих 2D-матриц для использования в caffe, но я наконец решил проблему:
В итоге я воспользовался предложением Шая по конвертации данных в формат HDF5. Это довольно легко читать и писать базы данных HDF5 в Matlab. Вы просто должны использовать функции hdf5info()
,h5read()
,h5create()
а также h5write()
которые уже реализованы в Matlab.
Пример:
- Измените тип данных в файле прототипа 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: ваши входные тренировочные данные должны быть четырехмерной матрицей, где последние два измерения равны размеру вашей двумерной матрицы входных данных в matlab.
- Пример: взять 2-мерную матрицу (данные изображения или данные с одинарной точностью) размером 54x24 (#rows x cols)
- -> транспонировать его и складывать в матрицу 24x54x1xN, где N - количество 2d матриц (обучающие выборки)
- Метки находятся в строке 1xN векторов в Matlab.
- Теперь создайте базу данных 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)
читать набор данных