2017-08-28 11 views
0

私は非常に大きなデータセットを持っており、Caffe用の単一のLMDBファイルに変換することはお勧めできません。したがって、私は小さな部分に分割し、対応するLMDBファイルへのパスを含むTXTファイルを指定しようとしています。 ここに私のデータ層の例です:複数のLMDBファイルをCaffeのデータレイヤーに供給する方法

layer { 
name: "data" 
type: "Data" 
top: "data" 
top: "label" 
include { 
phase: TRAIN 
} 
data_param { 
source: "path/to/lmdb.txt" 
batch_size: 256 
backend: LMDB 
    } 
} 

そして、これは私のlmdb.txtファイルです:

/path/to/train1lmdb 
/path/to/train2lmdb 
/path/to/train3lmdb 

しかし、私は次のエラーだ:だから

I0828 10:30:40.639502 26950 layer_factory.hpp:77] Creating layer data 
F0828 10:30:40.639549 26950 db_lmdb.hpp:15] Check failed: mdb_status == 0 
(20 vs. 0) Not a directory 
*** Check failure stack trace: *** 
@  0x7f678e4a3daa (unknown) 
@  0x7f678e4a3ce4 (unknown) 
@  0x7f678e4a36e6 (unknown) 
@  0x7f678e4a6687 (unknown) 
@  0x7f678ebee5e1 caffe::db::LMDB::Open() 
@  0x7f678eb2b7d4 caffe::DataLayer<>::DataLayer() 
@  0x7f678eb2b982 caffe::Creator_DataLayer<>() 
@  0x7f678ec1a1a9 caffe::Net<>::Init() 
@  0x7f678ec1c382 caffe::Net<>::Net() 
@  0x7f678ec2e200 caffe::Solver<>::InitTrainNet() 
@  0x7f678ec2f153 caffe::Solver<>::Init() 
@  0x7f678ec2f42f caffe::Solver<>::Solver() 
@  0x7f678eabcc71 caffe::Creator_SGDSolver<>() 
@   0x40f18e caffe::SolverRegistry<>::CreateSolver() 
@   0x40827d train() 
@   0x405bec main 
@  0x7f678ccfaf45 (unknown) 
@   0x4064f3 (unknown) 
@    (nil) (unknown) 
Aborted (core dumped) 

を、どのように私はそれを動作させることができますか?この種の方法は実現可能ですか?前もって感謝します。

答えて

2

問題:
あなたが"Data"層と"HDF5Data"層混乱している:あなたが唯一の lmdb/leveldbデータセット、およびあなたのsource:エントリを指定することができます"Data"層で
は、使用しているデータベースのみを指している必要があります。一方
は、"HDF5Data"層であなたが使用しようとしているすべてのバイナリファイルをリストテキストファイルに複数バイナリhdf5ファイル、およびsource:パラメータ点を持つことができます。 (コメントのPrzemekD後)

ソリューション
0は、それぞれに異なる"Data"層を追加します(小さいbatch_sizeで)持って、その後、単一minibatchに異なる入力を 『マージ』する"Concat"層を使用しlmdb 。
1.すでに推測できるように、データをhdf5バイナリ形式に変換し、"HDF5Data"層を使用する方法があります。
2.また、独自の"Python"入力層を作成することもできます。この層は、すべてのlmdbファイル(Pythonのlmdbインタフェースを使用)から読み込み、データをバッチごとにネットに送ることができます。

+1

解決方法3:1つのLMDBから複数のデータレイヤーをロードし、次に連結しますか? –

+0

@PrzemekD '' Concat''をバッチサイズの次元で指定します。それは良い考えです! – Shai

+0

データセットが大きすぎるため、一度に複数のLMDBをロードすると、メモリ不足の問題が発生しますか? @PrzemekD –

関連する問題