2016-04-13 17 views
1

ラベルがスカラではなく、各ラベルが(1、K)ベクトルであり、Kがクラスの数である、Pythonでlmdbデータを作成したいとします。具体的には、ラベルのベクトルを使用すると、1Pythonを使用したLMDBデータの行列としてのラベル

を持って対応するクラスのインデックスを除いてどこでもゼロを持っている私は、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 

をしかし、私はy[i]がnumpyのである。このエラーTypeError: only length-1 arrays can be converted to Python scalarsを得ました(1、k)ベクトルを生成する。

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

すべてのヘルプは非常に

答えて

1

をいただければ幸いですはい、カフェは、あなたがlmdbする基準を置くことができ、データムにnumpyの配列の変換をサポートしています。

caffe.io.array_to_datum(numpy_array)を使用してnumpy_arrayをdatumに変換すると、numpy_arrayには4つの軸が必要なので、vecttorをlmdbに配置するには、shape [1,1,1、M]でnumpy_arrayを初期化する必要があります。 Mはあなたのベクトルの長さです。

hereは、caffeネットワークに供給できるlmdbにイメージ/マップのペアを書き込むツールです。

関連する問題