2016-09-02 18 views
17

を作成するtf.train.shuffle_batchの使用()に関しては、tf.train.shuffle_batch()に関する次の例を示します:<a href="https://www.tensorflow.org/versions/r0.10/api_docs/python/io_ops.html#shuffle_batch" rel="noreferrer">Tensorflow tutorial</a>でバッチ

# Creates batches of 32 images and 32 labels. 
image_batch, label_batch = tf.train.shuffle_batch(
    [single_image, single_label], 
    batch_size=32, 
    num_threads=4, 
    capacity=50000, 
    min_after_dequeue=10000) 

私はcapacitymin_after_dequeueの意味について非常に明確ではないです。この例では、それぞれ5000010000に設定されています。このようなセットアップのロジックは何ですか?それは何を意味しますか?入力に200枚の画像と200枚のラベルがある場合、どうなりますか?

+0

mrryこんにちは、あなたはこの質問のために何か提案がありますか?ありがとう。 – user288609

答えて

20

tf.train.shuffle_batch()関数は、tf.RandomShuffleQueueを内部的に使用して、batch_size要素のバッチを累計します。このバッチは、現在キューにある要素からランダムに一様にサンプリングされます。

TensorFlowがニューラルネットワークを最適化するために使用する確率勾配降下アルゴリズム–などの多くのトレーニングアルゴリズムは、トレーニングセット全体からランダムに一様にサンプリングすることに依存しています。しかし、トレーニングセット全体をメモリからロードすることは現実的ではないため、tf.train.shuffle_batch()min_after_dequeueとの間の内部バッファを満たし、そのバッファからランダムに一様にサンプリングします。多くのトレーニングプロセスでは、モデルの精度が向上し、適切なランダム化が提供されます。

min_after_dequeuecapacityの引数は、トレーニングのパフォーマンスに間接的な影響を与えます。 min_after_dequeueの値を大きく設定すると、トレーニングの開始が遅れることがあります.TensorFlowは、トレーニングを開始する前に少なくともその多くの要素を処理する必要があるためです。 capacityは、入力パイプラインが消費するメモリ量の上限です。これを大きく設定すると、トレーニングプロセスのメモリが不足する可能性があります(スワップが開始され、トレーニングのスループットが低下する可能性があります)。

データセットに200のイメージしかない場合は、データセット全体をメモリに簡単にロードできます。 tf.train.shuffle_batch()は、それぞれの画像とラベルをtf.RandomShuffleQueueに複数回エンキューするので、非常に非効率です。この場合、あなたはそれがより効率的に、代わりに次のtf.train.slice_input_producer()を使用してtf.train.batch()を行うために見つけることがあります。

random_image, random_label = tf.train.slice_input_producer([all_images, all_labels], 
                  shuffle=True) 

image_batch, label_batch = tf.train.batch([random_image, random_label], 
              batch_size=32) 
関連する問題