2015-06-05 5 views
7

У меня есть куча 2D-матриц данных в Matlab (без данных изображения, но некоторые данные с одной точностью).Преобразование данных в leveldb для caffe

Кто-нибудь знает, как преобразовать 2D-матрицы матрицы Matlab в формат leveldb, который требуется caffe для обучения пользовательской нейронной сети?

Я уже сделал учебник о том, как тренироваться на изображениях (используя архитектуру imagenet) и на mnist (набор данных распознавания цифр). Однако в последнем примере они не показывали, как создать соответствующую базу данных. В учебнике база данных уже была предоставлена.

+0

Знаете ли вы https://github.com/kyamagu/matlab-leveldb? – fuesika

+0

Пока нет. Вы сами это пробовали? Я просто попытался загрузить с ним базу данных leveldb. Загрузка, похоже, работает нормально, но база данных кажется пустой. (Я не могу отображать какие-либо ключи, а переменная matlab имеет всего лишь 100 байтов, а реальная база данных - 2Gb). В моей базе данных хранятся файлы «data.mdb» и «lock.mdb». Может быть, caffe использует некоторую модифицированную версию leveldb? – mcExchange

+1

Почему бы не использовать слой HDF5_DATA? более гибкий ... – Shai

ответ

6

Я до сих пор не знаю, чтобы создать базу данных LevelDB моих матриц данных 2D для использования в CAFFE, но я, наконец, решить проблему:
Я закончил с использованием Shai's proposal для преобразования данных в формат HDF5. В Matlab довольно легко читать и писать базы данных HDF5. Вам просто нужно использовать функции hdf5info(), h5read(), h5create() и h5write(), которые уже реализованы в Matlab.

Пример:
- Изменение типа данных в вашем кофейной prototxt файл в "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 матрицей, где последние два измерения равны размеру вашей матрицы входных данных 2D в матрице.
Пример: возьмите 2d-матрицу (изображения или данные одинарной точности) размером 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); 
  • Как вы можете видеть, кофейная ожидает базу данных hdf5 с переменными «данные» и «ярлык»
  • Чтение базы данных:
    Использование hdf5info(filename) для получить имена наборов данных внутри базы данных hdf5. Затем с помощью data = h5read(filename,dataset) читать набора данных
+0

Отлично! Кстати, вам нужно файл '/ path/to/your/database/myMnist_train.txt' содержать имена файлов' h5', например, содержать строку: train.h5. – Shai

+0

Вы должны вычесть матрицы по средней матрице, прежде чем хранить их? – mad

+0

Это ваши данные, поэтому вы должны теперь, как бы вы хотели его преобразовать;). Обычно среднее вычитание и деление по стандартным отклонениям всегда должны улучшать численную оптимизацию. – mcExchange