2

Lenetの Python の例を見ると、MNIST テスト データセット全体を実行するために必要な反復回数がハードコーディングされていることがわかります。しかし、この値をまったくハードコーディングできないでしょうか? Pythonでネットワークが指すデータセットのサンプル数を取得するには?

4

2 に答える 2

3

ライブラリを使用しlmdbて、lmdb に直接アクセスできます。

import lmdb
db = lmdb.open('/path/to/lmdb_folder')       //Needs lmdb - method
num_examples = int( db.stat()['entries'] )

あなたのためにトリックを行う必要があります。

于 2015-12-06T12:43:44.167 に答える
1

1つの質問で反復サンプルの量を混合したようです。提供された例では、反復回数、つまりトレーニング フェーズが繰り返される回数のみを確認できます。反復の量(ネットワーク トレーニング パラメーター) とデータセット内のサンプルの量(ネットワーク入力)の間に直接的な関係はありません。

より詳細な説明:

編集: Caffeは、トレーニングまたはテストのために (バッチ サイズx反復) サンプルを完全に読み込みますが、読み込まれたサンプルの量実際のデータベース サイズとは関係ありません。データベースの最後のレコードに到達した後、最初から読み取りを開始します。つまり、Caffeのデータベースは循環バッファのように機能します。

言及された例は、この構成を示しています。lmdb の入力を想定しており、トレーニングフェーズではバッチ サイズ64 (バッチと BLOBに関する詳細情報) に、テストフェーズでは100に設定していることがわかります。実際には、入力データセット サイズ、つまりデータセット内のサンプル数については何も想定していません。バッチ サイズはチャンク サイズを処理するだけであり、反復カフェが使用するバッチ数です。データベースの終わりに達しても停止しません。

つまり、ネットワーク自体 (つまり、protobuf 構成ファイル) は、データベース内の任意の数のサンプルを指すのではなく、データセットの名前と形式、および必要な量のサンプルのみを指します。私が知っているように、現時点ではデータベースのサイズcaffeで決定する方法はありません。

したがって、テストのためにデータセット全体をロードする場合は、最初にmnist_test_lmdbまたはmnist_train_lmdbでサンプルの量を手動で決定し、次にバッチ サイズ反復に対応する値を指定するオプションしかありません。

これにはいくつかのオプションがあります。

  1. コンソール出力を見てください- 初期フォーマットからの変換中にサンプルの量を出力します (このチュートリアル./examples/mnist/create_mnist.shに従ったと思います);
  2. @Shai のアドバイスに従います (lmdb ファイルを直接読み取ります)。
于 2015-12-09T00:12:39.517 に答える