2016-09-14 8 views
1

バッチ処理はfeed_dictsよりもきれいに見えるので、私はTensorflowでバッチ処理を理解しようとしています。Tensorflowバッチ引数

以下のコードブロックは、バッチ内に32個の同一イメージを作成し、キューにフィードしますか?

# 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) 

コンテキストのビット:私は現在、約50Kの行を含む単一のファイルを持っています。私はtf.train.string_input_producertf.decode_csvを使用してcsvから行を読みますが、何をtf.train.shuffle_batchに引数として渡すか、個々の行またはファイルから読み込まれたすべての行を含むテンソルを混同しています。

答えて

1

質問のコードスニペットでは、テンソルsingle_imagesingle_labelが1つの画像とその関連ラベルに対応しています。 tf.train.shuffle_batch()image_batchおよびlabel_batchから返されたテンソルは、恐らく32個の異なる画像と、関連する32個のラベルに対応しています。 TensorFlowはtf.RandomShuffleQueueを内部的に使用してデータをシャッフルし、single_imagesingle_labelを評価する追加のスレッドを作成して、このキューに追加できるようにします。

tf.train.shuffle_batch()関数は、渡す引数によって異なる動作をします。たとえば、enqueue_many=Trueを渡すと、tensors引数のテンソルは要素のバッチとして解釈され、TensorFlowはそれらを先頭の次元に結合します(したがって、各テンソルは0次元の同じサイズでなければなりません)。 enqueue_many=Trueを使用すると、データセット全体をtf.train.shuffle_batch()に渡すことも、要素のバッチを渡すこともできます(たとえば、tf.ReaderBase.read_up_to()を使用)。


  *バッチ機能のシャッフルバージョンを使用しているので、私は「多分、違う」と言うと、あなたのデータセットがcapacitymin_after_dequeue引数に比べて小さい場合、あなたが表示されることがあります1つのバッチで同じサンプルの複数のコピーを作成します。

+0

ご回答ありがとうございます。私は 'tf.train.shuffle_batch()'が32個の異なるイメージをどこから描画するのか、まだ混乱しています。元の投稿のコードスニペットでは、 'tf.train.shuffle_batch()'に渡された引数から判断すると、 'single_image'以外のデータにアクセスすることはできません。 – Eweler

+1

TensorFlowは 'single_image'と' single_label'を(tf.train.start_queue_runners()で作成された別のスレッドで)何度も評価し、それらを 'tf.train.shuffle_batchの内部で作成されたキューに追加します) '。したがって、 'single_image'と' single_label'が評価するたびに(例えば 'ReaderBase.read()' opの結果であるため)異なる値を持つと、結果に異なるイメージが表示されます。 'single_image'が常に同じ値(例えば定数であるため)と評価される場合、同じイメージのコピーが32個得られます。 – mrry

関連する問題