2015-06-05 16 views
7

Ho un gruppo di matrici di dati 2D in Matlab (nessun dato di immagine, ma alcuni dati di precisione singoli).Converti dati in leveldb per caffe

Qualcuno sa come convertire le matrici MATLAB 2D nel formato leveldb richiesto da caffe per addestrare una rete neurale personalizzata?

Ho già fatto il tutorial su come allenare le immagini (usando l'architettura imagenet) e su mnist (dataset di riconoscimento delle cifre). Tuttavia nel secondo esempio non hanno mostrato come creare il rispettivo database. Nel tutorial il database era già stato fornito.

+0

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

+0

Non ancora. Hai provato tu stesso? Ho appena provato a caricare un database di leveldb con esso. Il caricamento sembra funzionare correttamente, ma il database sembra essere vuoto. (Non riesco a visualizzare alcun tasto e la variabile MATLAB ha solo 100 byte mentre il vero database è 2Gb). Il mio database incorpora i file "data.mdb" e "lock.mdb". Forse caffe usa una versione modificata di leveldb? – mcExchange

+1

perché non utilizzare invece il layer HDF5_DATA? più flessibile ... – Shai

risposta

6

Io ancora non so per creare un database LevelDB delle mie matrici di dati 2D per l'uso in caffe ma alla fine ho risolto dal problema:
ho finito per usare Shai's proposal per convertire i dati in formato HDF5. È abbastanza facile leggere e scrivere database HDF5 in Matlab. Devi solo usare le funzioni hdf5info(), h5read(), h5create() e h5write() che sono già implementate in Matlab.

Esempio:
- Modificare il tipo di dati nel file caffe prototxt a "hdf5layer", in questo modo:

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

Usa Matlab per creare database HDF5:
- Caffe: La vostra formazione in ingresso i dati devono essere una matrice 4-D in cui le ultime due dimensioni sono uguali alle dimensioni della matrice di dati di input 2D in MATLAB.
- Esempio: prendere una matrice 2d (immagine o dati di precisione singoli) di dimensione 54x24 (#rows x cols)
- -> trasporre e impilarlo in una matrice 24x54x1xN, dove N è il numero di matrici 2d (campioni di addestramento)
- Le etichette si trovano in vettori di riga 1xN in matlab.
- Ora crea il database 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); 
  • Come si può vedere, caffe aspetta un database HDF5 con le variabili "dati" e "etichetta"
  • lettura di un database:
    Usa hdf5info(filename) a ottenere i nomi dei set di dati all'interno di un database hdf5. Quindi utilizzare data = h5read(filename,dataset) per leggere il dataset
+0

Eccellente! A proposito, è necessario il file '/ path/to/your/database/myMnist_train.txt' per contenere i nomi di file' h5', ad esempio per contenere la riga: treno.h5. – Shai

+0

Devi sottrarre le matrici dalla matrice media prima di memorizzarle? – mad

+0

Sono i tuoi dati quindi dovresti ora come vorresti trasformarlo;). La sottrazione e la divisione media generalmente pronunciate per deviazione standard dovrebbero sempre migliorare l'ottimizzazione numerica. – mcExchange