1

ラベルがスカラーではなく、各ラベルが (1,K) ベクトルで、K がクラスの数である Python で lmdb データを作成したいと考えています。より具体的には、ラベル ベクトルには、1 の対応するクラス インデックスを除いて、どこでもゼロがあります。

Python で次のコードをテストしました。

with env.begin(write=True) as txn:
    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].tobytes()  # or .tostring() if numpy < 1.9
        datum.label = int(y[i])
        str_id = '{:08}'.format(i)
        txn.put(str_id.encode('ascii'), datum.SerializeToString())
        print i+1

しかし、上記のようにnumpy (1,k) ベクトルであるこのエラーTypeError: only length-1 arrays can be converted to Python scalarsが発生しました。y[i]

また、カフェがそのような形式のラベルを受け入れるかどうかも疑問に思っています。

どんな助けでも大歓迎です

4

1 に答える 1

1

はい、caffe は numpy 配列のデータへの変換をサポートしており、そのデータを lmdb に配置できます。

を使用caffe.io.array_to_datum(numpy_array)して numpy_array をデータムに変換します。numpy_array には 4 つの軸が必要であることに注意してください。そのため、ベクトルを lmdb に入れたい場合は、numpy_array を形状 [1,1,1,M] で初期化する必要があります。M は長さです。あなたのベクトルの。

これは、イメージ/マップのペアを lmdb に書き込み、カフェ ネットワークにフィードできるツールです。

于 2016-04-14T05:59:27.127 に答える