2016-06-06 54 views
7

Converto i miei dati di immagine in formato db caffe (leveldb, lmdb) utilizzando C++ come esempio, utilizzo questo codice per imagenet.Caffe ha bisogno di dati da mescolare?

I dati devono essere mescolati, posso scrivere a db tutti i miei positivi e quindi tutti i miei negativi come 00000000111111111, o i dati devono essere mescolati e le etichette dovrebbero apparire come 010101010110101011010?

Come dati di esempio caffe da DB, è vero che utilizza un sottoinsieme casuale di tutti i dati con dimensione = batch_size?

risposta

10

Se si mescolano i campioni? Pensa al processo di apprendimento se non mescoli; caffe vede solo gli esempi 0 - cosa ti aspetti che l'algoritmo deduca? semplicemente prevedere 0 tutto il tempo e tutto è bello. Se hai un sacco di 0 prima di colpire il primo 1 caffe sarà molto fiducioso nel prevedere sempre 0. Sarà molto difficile spostare il modello da questo punto.
D'altra parte, se rileva costantemente un mix di 0 e 1, viene visualizzato dall'inizio funzioni significative per la separazione degli esempi.
Riga inferiore: è molto vantaggioso mescolare i campioni di addestramento, soprattutto quando si utilizzano approcci basati su SGD.

AFAIK, caffe non campiona in modo casuale campioni batch_size, ma preferisce passare in sequenza sull'ingresso DB batch_size dopo gli esempi batch_size.

TL; DR
shuffle.

+4

Trova anche questo https://github.com/BVLC/caffe/issues/1087 'il motivo per cui le cose vengono letti in sequenza è a scopo di prestazione - l'accesso casuale su HDD convenzionali è vicino a un disastro. Un'altra domanda cosa succede quando batch_size * number_iters> number_samples? Inizia a campionare dall'inizio del DB? – mrgloom

+1

@mrgloom caffe attraversa i dati ripetutamente, finché non raggiunge 'number_iter'. – Shai