TensorFlow函数教程:tf.queue.PriorityQueue
tf.queue.PriorityQueue函数
类 PriorityQueue
继承自: QueueBase
别名:
- 类 tf.PriorityQueue
- 类 tf.io.PriorityQueue
定义在:tensorflow/python/ops/data_flow_ops.py。
一种队列实现,以优先顺序使元素出列。
有关此类方法的说明,请参阅tf.QueueBase,这将在下一节介绍。
__init__
__init__(
capacity,
types,
shapes=None,
names=None,
shared_name=None,
name='priority_queue'
)
创建一个队列,以先进先出顺序将元素出列。
PriorityQueue具有有限的容量;支持多个并发生产者和使用者;并提供准确的一次交付。
PriorityQueue包含最多capacity元素的列表。每个元素是一个固定长度的张量元组,其dtypes由types描述,其shape可选地由shapes参数描述。
如果指定了shapes参数,则队列元素的每个组件必须具有相应的固定形状。如果未指定,则不同的队列元素可能具有不同的shape,但不允许使用dequeue_many。
PriorityQueue的Enqueues和Dequeues必须在开头包含一个额外的元组条目:priority。priority必须是int64标量(用于enqueue)或int64向量(用于enqueue_many)。
参数:
- capacity:一个整数。可以存储在此队列中的元素数量的上限。
- types:DType对象列表。除第一优先级元素外,types长度必须等于每个队列元素中的张量数。每个元素中的第一个张量是priority,必须是int64类型。
- shapes:(可选)完全定义的TensorShape对象列表,长度与types相同或者为None。
- names:(可选)一个字符串列表,该字符串命名队列中的组件,其长度与dtypes相同或者为None。如果指定,则dequeue方法返回名称与键相同的字典。
- shared_name:(可选)如果非空,则此队列将在多个会话中以给定名称共享。
- name:队列操作的可选名称。
属性
dtypes
队列元素的每个组件的dtypes列表。
name
底层队列的名称。
names
队列元素的每个组件的names列表。
queue_ref
底层队列引用。
shapes
队列元素的每个组件的shapes列表。
方法
close
close(
cancel_pending_enqueues=False,
name=None
)
关闭此队列。
此操作表示不再有元素将在给定队列中排队。随后enqueue和enqueue_many操作将失败。如果队列中仍有足够的元素,则后续的dequeue和dequeue_many操作将继续成功。随后出列的dequeue和dequeue_many操作会阻止等待更多元素(如果没有调用close)将立即失败。
如果cancel_pending_enqueues是True,所有待处理的请求也将被取消。
参数:
- cancel_pending_enqueues:(可选)布尔值,默认为 False(如上所述)。
- name:操作的名称(可选)。
返回:
关闭队列的操作。
dequeue
dequeue(name=None)
从此队列中取消一个元素。
如果在执行此操作时队列为空,则它将阻塞,直到有一个要出队的元素。
在运行时,如果队列在执行之前或期间是tf.QueueBase.close,则此操作可能会引发错误。如果队列已关闭,则队列为空,并且没有可以满足此请求的待处理入队操作,将引发tf.errors.OutOfRangeError。如果会话是tf.Session.close,则会引发tf.errors.CancelledError。
参数:
- name:操作的名称(可选)。
返回:
已经出列的张量的元组。
dequeue_many
dequeue_many(
n,
name=None
)
从此队列中取出并连接n个元素。
此操作沿第0维连接队列元素组件张量,以生成单个组件张量。dequeued(出列)元组中的所有组件在第0维中的大小为n。
如果队列已关闭且剩余的元素少于n个,则会引发OutOfRange异常。
在运行时,如果队列在执行之前或期间是tf.QueueBase.close,则此操作可能会引发错误。如果队列关闭,则队列包含的元素少于n个,并且没有可以满足此请求的待处理enqueue(入队)操作,将引发tf.errors.OutOfRangeError。 如果会话是tf.Session.close,则会引发tf.errors.CancelledError。
参数:
- n:包含要出列的元素数量的标量Tensor。
- name:操作的名称(可选)。
返回:
已出列的连接张量列表。
dequeue_up_to
dequeue_up_to(
n,
name=None
)
从此队列中取出并连接n个元素。
注意:所有队列都不支持此操作。如果队列不支持DequeueUpTo,则会引发tf.errors.UnimplementedError。
此操作沿第0维连接队列元素元素组件张量,以生成单个组件张量。如果队列尚未关闭,则出列元组中的所有组件将在第0维中具有大小n。
如果队列已关闭并且剩余的元素数超过0但少于n个,则不会像tf.QueueBase.dequeue_many那样引发tf.errors.OutOfRangeError,而是立即返回少于n个元素。如果队列已关闭并且队列中剩余0个元素,则会引发tf.errors.OutOfRangeError,就像在dequeue_many中一样。否则行为与dequeue_many相同。
参数:
- n:包含要出列的元素数量的标量Tensor。
- name:操作的名称(可选)。
返回:
已经出列的连接张量的元组。
enqueue
enqueue(
vals,
name=None
)
将一个元素排入此队列。
如果在执行此操作时队列已满,则它将阻塞,直到该元素已入队。
在运行时,如果队列在执行之前或期间是tf.QueueBase.close,则此操作可能会引发错误。 如果在此操作运行之前关闭队列,则将引发tf.errors.CancelledError。如果此操作被阻止,并且(i)通过cancel_pending_enqueues = True的关闭操作关闭队列,或者(ii)会话为tf.Session.close,则将引发tf.errors.CancelledError。
参数:
- vals:张量,张量的列表或元组,或包含要排队的值的字典。
- name:操作的名称(可选)。
返回:
将新元组的张量排入队列的操作。
enqueue_many
enqueue_many(
vals,
name=None
)
将零个或多个元素排入此队列。
此操作沿着第0维度切割每个组件张量以生成多个队列元素。val中的所有张量在第0维中必须具有相同的大小。
如果在执行此操作时队列已满,它将阻塞,直到所有元素都已入队。
在运行时,如果队列在执行之前或期间是tf.QueueBase.close,则此操作可能会引发错误。如果在此操作运行之前关闭队列,则将引发tf.errors.CancelledError。如果此操作被阻止,并且(i)通过cancel_pending_enqueues = True的关闭操作关闭队列,或者(ii)会话为tf.Session.close,则将引发tf.errors.CancelledError。
参数:
- vals:张量,张量的列表或元组,或从中获取队列元素的字典。
- name:操作的名称(可选)。
返回:
将一批张量的元组排入队列的操作。
from_list
from_list(
index,
queues
)
使用queues[index]中的队列引用创建队列。
参数:
- index:整数标量张量,用于确定所选的输入。
- queues:QueueBase对象的列表。
返回:
一个QueueBase对象。
可能引发的异常:
- TypeError:当队列不是QueueBase对象的列表时,或者队列的数据类型不完全相同时。
is_closed
is_closed(name=None)
如果队列关闭,则返回true。
如果队列关闭,则此操作返回true,如果队列打开,则返回false。
参数:
- name:操作的名称(可选)。
返回:
如果队列已关闭则为True,如果队列已打开则为false。
size
size(name=None)
计算此队列中的元素数。
参数:
- name:操作的名称(可选)。
返回:
标量张量,包含此队列中的元素数。