对于性能监控,我想关注当前排队的示例.我正在平衡我用于填充队列的线程数量以及队列的最佳最大大小.我如何获得这些信息?我正在使用tf.train.batch(),但我想这些信息可能会在某个地方出现FIFOQueue?我原以为这是一个局部变量,但我还没有找到它.
tldr:如果你的队列是由tf.batch你创建的,你可以得到大小sess.run("batch/fifo_queue_Size:0")
甲FIFOQueue对象提供了size()其产生一个运算,让上队列中的元素的数目的方法.但是,如果您正在使用tf.batch,则会在方法内部创建FIFOQueue,并且此对象不会在外部公开.
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))
Run Code Online (Sandbox Code Playgroud)
既然queue是本地的,你就无法掌握它的size()方法.但是,由于size()已经调用以构造摘要,因此适当的sizeop在图中,您可以按名称调用它.你可以通过这样的方式找到节点的名称
x = tf.constant(1)
q = tf.train.batch([x], 2)
tf.get_default_graph().as_graph_def()
Run Code Online (Sandbox Code Playgroud)
你会看见
node {
name: "batch/fifo_queue_Size"
op: "QueueSize"
input: "batch/fifo_queue"
attr {
key: "_class"
value {
list {
Run Code Online (Sandbox Code Playgroud)
从这里您可以看出这batch/fifo_queue_Size是op的名称,因此batch/fifo_queue_Size:0是第一个输出的名称,因此您可以通过执行以下操作来获取大小:
sess.run("batch/fifo_queue_Size:0")
Run Code Online (Sandbox Code Playgroud)
如果你有多个batchOPS,名称会自动去重成batch_1/fifo_queue_Size,batch_2/fifo_queue_Size等
或者,你可以调用你的节点,tf.batch(...name="mybatch")然后张量的名称将是mybatch/fifo_queue_Size:0
| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |