Конвертировать данные в 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) читать набор данных
Другие вопросы по тегам