2015-06-05 10 views
7

Ich habe eine Reihe von 2D-Datenmatrizen in Matlab (keine Bilddaten, aber einige Daten mit einfacher Genauigkeit).Konvertieren von Daten in leveldb für caffe

Kann jemand 2D MATLAB-Matrizen in das leveldb-Format konvertieren, das von Caffe benötigt wird, um ein benutzerdefiniertes neuronales Netzwerk zu trainieren?

Ich habe bereits das Tutorial über das Trainieren von Bildern (mit der Imagine-Architektur) und von mnist (Digit Recognition Dataset) gemacht. Im letzten Beispiel wurde jedoch nicht gezeigt, wie die entsprechende Datenbank erstellt wird. Im Tutorial wurde die Datenbank bereits bereitgestellt.

+0

Kennen Sie https://github.com/kyamagu/matlab-leveldb? – fuesika

+0

Noch nicht. Hast du es selbst ausprobiert? Ich habe gerade versucht, eine leveldb-Datenbank damit zu laden. Laden scheint zu funktionieren, aber die Datenbank scheint leer zu sein. (Ich kann keine Schlüssel anzeigen und die Matlab-Variable ist nur 100 Bytes groß, während die reale Datenbank 2 GB ist). Meine Datenbank enthält die Dateien "data.mdb" und "lock.mdb". Vielleicht verwendet Caffe eine modifizierte Version von leveldb? – mcExchange

+1

warum nicht stattdessen HDF5_DATA-Layer verwenden? flexibler ... – Shai

Antwort

6

Ich weiß immer noch nicht über eine LevelDB Datenbank meiner 2D-Datenmatrix für den Einsatz in caffe zu schaffen, aber ich schließlich von Problem gelöst:
ich mit Shai's proposal endete, um die Daten zu HDF5-Format zu konvertieren. Es ist ziemlich einfach HDF5-Datenbanken in Matlab zu lesen und zu schreiben. Sie müssen lediglich die bereits in Matlab implementierten Funktionen , h5read(), und h5write() verwenden.

Beispiel:
- die Datenänderungs-Typ in Ihrer caffe prototxt Datei auf "hdf5layer", wie folgt aus:

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 
    } 
} 

Verwendung Matlab HDF5 Datenbanken zu erstellen:
- Caffe: Ihre Eingaben Ausbildung Daten müssen eine 4-D-Matrix sein, wobei die letzten beiden Dimensionen gleich der Größe Ihrer 2D-Eingabedatenmatrix in Matlab sind.
- Beispiel: Nimm eine 2D-Matrix (Bild oder Einzelpräzisionsdaten) der Größe 54x24 (#Rows x Spalten)
- -> transponiere sie und staple sie in eine 24x54x1xN Matrix, wobei N die Anzahl der 2d Matrizen ist (Trainingsproben)
- Die Etiketten werden in einem 1xN Zeilenvektoren in Matlab.
- Jetzt ist Ihre hdf5 Datenbank erstellen:

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); 
  • Wie Sie sehen können, caffe erwartet eine hdf5 Datenbank mit den Variablen "Daten" und "label"
  • eine Datenbank lesen:
    Verwenden hdf5info(filename) zu Holen Sie die Dataset-Namen in eine hdf5-Datenbank. Verwenden Sie dann data = h5read(filename,dataset), um den Datensatz zu lesen
+0

Ausgezeichnet! BTW, müssen Sie '/ path/to/your/Datenbank/myMnist_train.txt' Datei, die die' h5' Dateinamen enthalten, beispielsweise Zeile enthält: train.h5. – Shai

+0

Müssen Sie die Matrizen vor dem Speichern durch die Mittelwertmatrix subtrahieren? – mad

+0

Es sind deine Daten also solltest du jetzt wie du es transformieren möchtest;). Im Allgemeinen sollte die mittlere Subtraktion und Division durch Standardabweichung immer die numerische Optimierung verbessern. – mcExchange