Преобразование данных mnist в lmdb с помощью python приводит к очень большой базе данных

python c++ caffe pycaffe lmdb

399 просмотра

1 ответ

676 Репутация автора

В настоящее время я играю модель lenet, предоставленную caffe.

пример (который находится в пути / к / caffe / examples / mnist / convert_mnist_data.cpp предоставляет программу на языке c ++ для преобразования данных mnist в lmdb.

Я пишу программу на python, чтобы сделать то же самое, но размер (480 МБ) lmdb намного больше, чем тот, который преобразован в c ++ (60 МБ).

Точность теста почти одинакова (98%).

Я хочу знать, почему размер сильно отличается.

Вот программа. Я использую модуль mnist ( 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()

благодарю вас.

Автор: alec.tu Источник Размещён: 18.07.2016 11:45

Ответы (1)


0 плюса

1 Репутация автора

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

Размер БД в основном зависит от map_size, поэтому вы можете уменьшитьmap_size

Автор: junyu Размещён: 12.08.2016 03:26
Вопросы из категории :
32x32