gpt4 book ai didi

python - Tensorflow - 获取队列中的样本量?

转载 作者:行者123 更新时间:2023-11-28 21:45:01 26 4
gpt4 key购买 nike

对于性能监控,我想关注当前排队的示例。我正在平衡用于填充队列的线程数量和队列的最佳最大大小。我如何获得这些信息?我正在使用 tf.train.batch(),但我猜这些信息可能位于 FIFOQueue 中的某处?我原以为这是一个局部变量,但我还没有找到。

最佳答案

tldr:如果您的队列是由 tf.batch 创建的,您可以使用 sess.run("batch/fifo_queue_Size:0") 获取大小

FIFOQueue 对象提供了一个 size() 方法,它创建一个操作,给出队列中的元素数量。但是,如果您使用的是 tf.batch,则会在方法内部创建 FIFOQueue,并且不会向外部公开此对象。

特别是您在 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))

由于 queue 是本地的,您无法获取其 size() 方法。但是,由于已调用 size() 来构建摘要,因此适当的 size op 位于图中,您可以按名称调用它。你可以通过做这样的事情来找到节点的名称

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

你会看到

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

由此您可以看出 batch/fifo_queue_Size 是操作的名称,因此 batch/fifo_queue_Size:0 是第一个输出的名称,因此您可以通过做这样的事情来获得尺寸:

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

如果您有多个 batch 操作,名称将被自动删除为 batch_1/fifo_queue_Sizebatch_2/fifo_queue_Size

或者,您可以使用 tf.batch(...name="mybatch") 调用您的节点,然后张量的名称将为 mybatch/fifo_queue_Size:0

关于python - Tensorflow - 获取队列中的样本量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com