2016-10-19 22 views
0

私はlmdbデータベースを持っており、その内容を読み取ろうとしています!
皮肉は何も画面に印刷されません!
これは私がlmdbからの読み取りのために書かれているコードスニペット:Pythonでlmdbカーソルを使用するとデータが読み込まれない

import caffe 
import lmdb 
import numpy as np 
from caffe.proto import caffe_pb2 
import cv2 
import sys 

db_train = lmdb.open('mnist_train_lmdb') 
db_train_txn = db_train.begin() 
cursor = db_train_txn.cursor() 

print db_train 
print db_train_txn 
print db_train_txn.cursor() 

datum = caffe_pb2.Datum() 

index = sys.argv[0] 
size_train = 50000 
size_test = 10000 
data_train = np.zeros((size_train, 1, 28, 28)) 
label_train = np.zeros(size_train, dtype=int) 

print 'Reading training data...' 
i = -1 
for key, value in cursor: 
    i = i + 1 
    if i % 1000 == 0: 
     print i 
    if i == size_train: 
     break 
    datum.ParseFromString(value) 
    label = datum.label 
    data = caffe.io.datum_to_array(datum) 
    data_train[i] = data 
    label_train[i] = label 

この版画:

<Environment object at 0x0000000009CE3990> 
<Transaction object at 0x0000000009CE1810> 
<Cursor object at 0x0000000009863738> 
Reading training data... 
Reading test data... 

それは全くのループdoesntの実行のようです!
私はここで何が欠けていますか?
これは通常のlmdbの読み方であると思われますが、私が見たすべてのソースの例は同様のアプローチです。

+0

1000以上のデータ項目がありますか? – CAB

+0

はい実際50Kです。 – Breeze

答えて

1

は自分自身を修正:

lmdb.Cursor()

for key, value in cursor: 

while cursor.next(): 

を使用して両方の道を右にしていると私は、元の答えで間違っていました。


あなたはcursorを適切に使用していませんでしたし、若干の修正は以下のようにあなたのコード内でなされるべきである:結合lmdbパイソンの詳細使用方法について

... # original stuff 
print 'Reading training data...' 
i = -1 
while cursor.next(): # Move to the next element, and 
    i = i + 1  # note cursor starts in an unpositioned state 
    if i % 1000 == 0: 
     print i 
    if i == size_train: 
     break 
    datum.ParseFromString(cursor.value()) 
    label = datum.label 
    data = caffe.io.datum_to_array(datum) 
    data_train[i] = data 
    label_train[i] = label 

、あなたはhereを参照することができます。

+0

ありがとうございますが、まだ何もありません! – Breeze

+0

@Hossein 'mnist_train_lmdb'は正しく作成されていますか?あなたはそれを確認しましたか? – Dale

+0

別のデータベースをテストしただけで、あなたは正しくデータベースに障害があります。両方のコードは正常に動作します。 途中でありがとう – Breeze

1

OK、データベースに問題があるようです!私は別のデータベースを使いましたが、うまくいきました。私のコードスニペットと@DaleSongによって提案されたもの。

関連する問題