【问题标题】:Converting mnist data to lmdb with python results very large database使用 python 将 mnist 数据转换为 lmdb 结果非常大的数据库
【发布时间】:2016-07-18 11:45:38
【问题描述】:

我目前正在玩caffe提供的lenet模型。

示例(在 path/to/caffe/examples/mnist/convert_mnist_data.cpp 中提供了一个 c++ 程序将 mnist 数据转换为 lmdb。

我写了一个python程序来做同样的事情,但是lmdb的大小(480MB)比c++转换的大小(60MB)要大很多。

测试准确率几乎相同 (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()

谢谢。

【问题讨论】:

    标签: python c++ caffe pycaffe lmdb


    【解决方案1】:
    env = lmdb.open('mnist_lmdb', map_size=1000*1000*1000)
    

    db大小主要取决于map_size,所以可以减少map_size

    【讨论】:

      猜你喜欢
      • 2015-10-17
      • 2011-02-17
      • 2020-04-16
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      相关资源
      最近更新 更多