2016-07-18 4 views
0

현재 caffe에서 제공하는 lenet 모델을 재생하고 있습니다.파이썬으로 mnist 데이터를 lmdb로 변환 매우 큰 데이터베이스

경로 /로/CAFFE/예/mnist/convert_mnist_data.cpp mnist 데이터가 lmdb로 변환하는 C++ 프로그램을 제공합니다. 내가 파이썬 프로그램이 같은 일을 쓰기

에있는 예를 (, 하지만 lmdb의 크기 (4백80메가바이트)는 C++ (60메가바이트)에 의해 변환 된 것보다 훨씬 더 크다.

테스트 정확도가 거의 (98 %)과 동일합니다.

내가 크기가 다릅니다 이유를 알고 싶어 많이.

다음은 프로그램입니다. 나는 mnis t 모듈 (https://pypi.python.org/pypi/python-mnist/)을 사용하면 이진 mnist 데이터를로드하는 데 도움이됩니다.

from mnist import MNIST 
import numpy as np 
import cv2 
import lmdb 
import caffe 
mndata = MNIST('./data') 
images, labels = mndata.load_training() 
labels = np.array(labels) 
images = np.array(images).reshape(len(labels), 28, 28).astype(np.uint8) 

print type(images[0][0][0]) 

count = 0 
env = lmdb.open('mnist_lmdb', map_size=1000*1000*1000) 

txn = env.begin(write=True) 
for i in xrange(len(labels)): 
    print i 
    datum = caffe.proto.caffe_pb2.Datum() 
    datum.channels = 1 
    datum.height = 28 
    datum.width = 28 
    datum.data = images[i].tobytes() 
    datum.label = labels[i] 
    str_id = '{:08}'.format(i) 
    txn.put(str_id, datum.SerializeToString()) 

    count = count + 1 

    if count % 1000 == 0: 
     txn.commit() 
     txn = env.begin(write=True) 

if count % 1000 != 0: 
    txn.commit() 
env.close() 

감사합니다.

답변

0
env = lmdb.open('mnist_lmdb', map_size=1000*1000*1000) 

DB를 크기가 주로 map_size에 따라, 그래서 당신이 map_size

을 줄일 수 있습니다