2016-10-22 6 views
1

パフォーマンスモニタリングのために、現在キューに入れられている例に注目したいと思います。私はキューを満たすために使用しているスレッドの量とキューの最適な最大サイズのバランスを取っています。 この情報はどのように入手できますか?私はtf.train.batch()を使用していますが、情報はFIFOQueueのどこかにある可能性がありますか? これはローカル変数であると思っていましたが、見つけられませんでした。Tensorflow - キュー内のサンプル量を取得しますか?

答えて

4

tldr:あなたのキューがによって作成された場合、あなたはsess.run("batch/fifo_queue_Size:0")

FIFOQueueオブジェクトがキュー上の要素の数を与えるオペアンプを作成size()方法を提供してサイズを取得することができます。ただし、を使用している場合、メソッド内にFIFOQueueが作成され、このオブジェクトは外部に公開されません。特に

あなたはqueueがローカルであるので、あなたはそのsize()方法を手に入れることができませんinput.py

queue = _which_queue(dynamic_pad)(
    capacity=capacity, dtypes=types, shapes=shapes, shared_name=shared_name) 
print("Enqueueing: ", enqueue_many, tensor_list, shapes) 
_enqueue(queue, tensor_list, num_threads, enqueue_many) 
summary.scalar("queue/%s/fraction_of_%d_full" % (queue.name, capacity), 
       math_ops.cast(queue.size(), dtypes.float32) * 
       (1./capacity)) 

でこれを参照してください。ただし、サマリーを作成するためにsize()が呼び出されているため、適切なsize opがグラフに表示され、名前で呼び出すことができます。あなたはあなたがbatch/fifo_queue_SizeはOPの名前であるため、batch/fifo_queue_Size:0名であることを伝えることができる。このことから

node { 
    name: "batch/fifo_queue_Size" 
    op: "QueueSize" 
    input: "batch/fifo_queue" 
    attr { 
    key: "_class" 
    value { 
     list { 

が表示されます。この

x = tf.constant(1) 
q = tf.train.batch([x], 2) 
tf.get_default_graph().as_graph_def() 

ような何かを行うことにより、ノードの名前を見つけることができます最初の出力の、あなたはこのような何かをすることによってサイズを得ることができるので:

sess.run("batch/fifo_queue_Size:0") 

複数batch OPSを持っている場合は、名前がAUTになりますomatically代わりにあなたがtf.batch(...name="mybatch")とあなたのノードを呼び出すことができ、その後、テンソルの名前はmybatch/fifo_queue_Size:0

+0

優れたライト・アップされますbatch_1/fifo_queue_Sizebatch_2/fifo_queue_Sizeなど

に重複排除。私は 'merge_all_summaries'をしませんが、自分のスコープからそれらを取得するので、バッチ内のスカラーサマリーも完全に見逃しました。ヤロスラフにお時間をありがとう。 – TimZaman

関連する問題