Ho circa 1 milione di immagini da inserire in questo set di dati 10000 alla volta aggiunti al set.come aggiungere dati a LMDB esistente?
I "sicuro che l'map_size è sbagliato con rif da questo article
utilizzato questa linea per creare il set
env = lmdb.open(Path+'mylmdb', map_size=int(1e12)
uso questa linea ogni 10000 di esempio per scrivere i dati in un file dove X e Y sono segnaposto per i dati che devono essere messi in LMDB.
env = create(env, X[:counter,:,:,:],Y,counter)
def create(env, X,Y,N):
with env.begin(write=True) as txn:
# txn is a Transaction object
for i in range(N):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = X.shape[1]
datum.height = X.shape[2]
datum.width = X.shape[3]
datum.data = X[i].tostring() # or .tostring() if numpy < 1.9
datum.label = int(Y[i])
str_id = '{:08}'.format(i)
# The encode is only essential in Python 3
txn.put(str_id.encode('ascii'), datum.SerializeToString())
#pdb.set_trace()
return env
come posso modificare il codice in modo che nuovi dati si aggiunge a questa LMDB e non sostituito ° è presente il metodo lo sostituisce nella stessa posizione. Ho controllato la lunghezza dopo la generazione con env.stat().
Se si conosce la lunghezza e sapere che tutti i record esistenti hanno id inferiore alla lunghezza, perché non si può sostituire la linea 'str_id = '{: 08}' formato (i)' 'per str_id = '{. :. 08}' formato (existing_length + 1 + i) '? –
Thanks you questo ha funzionato :) @SudeepJuvekar –