TensorFlow队列函数:tf.QueueBase
tf.QueueBase 函数
QueueBase 类
定义在:tensorflow/python/ops/data_flow_ops.py.
请参阅指南:输入和读取器>队列
队列实现的基类.
一个队列是一个 TensorFlow 数据结构,它存储了跨越多个步骤的张量,并公开了对张量进行入队和出队的操作.
每个队列元素是一个或多个张量的元组,其中每个元组元素具有静态 dtype,并且可以具有静态形状.队列实现支持处理单个元素的 enqueue 和 dequeue版本,同时支持入队和出队一批元素的版本.
见 tf.FIFOQueue 和 tf.RandomShuffleQueue 了解该类的具体实现以及关于如何创建这个类的说明.
属性
- dtypes
队列元素的每个组件的 dtypes 列表. - name
底层队列的名称. - names
队列元素的每个组件的名称列表. - queue_ref
底层的队列引用. - shapes
队列元素的每个组件的形状列表.
方法
__init__
__init__(
dtypes,
shapes,
names,
queue_ref
)
从队列引用构造一个队列对象.
两个可选的列表,shapes 和 names,它们必须具有与 dtypes(如果提供)相同的长度,给定索引处的值 i 指示在 dtypes 中用于相应队列组件的形状和名称.
参数:
- dtypes:类型列表.dtypes 的长度必须等于每个元素中张量的数量.
- shapes:对元素中张量形状的约束:形状元组列表或 None.此列表与 dtypes 的长度相同.如果元素中任何张量的形状都受到限制,如果形状不应该被限制,形状可以是 None.
- names:可选的名称列表.如果提供,enqueue() 和 dequeue() 方法将使用这些名字作为键的字典.必须是 None 或与 dtypes 长度相同的列表或元组.
- queue_ref:队列引用,即队列操作的输出.
可能发生的异常:
- ValueError:如果其中一个参数是无效的.
close
close(
cancel_pending_enqueues=False,
name=None
)
关闭这个队列.
这个操作表明没有更多的元素将被排入队列.后续 enqueue 和 enqueue_many 操作将失败.如果足够的元素保留在队列中,后续 dequeue 和 dequeue_many 操作将继续成功.随后 dequeue 和 dequeue_many 操作将立即失败,否则会阻止等待更多的元素(如果关闭没有被调用).
如果 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维连接起来,从而构成一个单一的分量.取消元组中的所有组件都将在第0维度中具有 n 个大小.
如果队列关闭,并且剩余的元素少于 n 个,则会引发 OutOfRange 异常.
在运行时,如果队列 tf.QueueBase.close 在执行之前或执行期间,此操作可能会引发错误.如果队列关闭,则队列中包含的元素少于 n 元素,并且没有可以执行此请求的未决队列操作 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 元素,则会像在 dequeue_many 中一样引发 tf.errors.OutOfRangeError.否则,该行为与 dequeue_many 相同.
参数:
- n:包含要排队的元素数量的标量 Tensor.
- name:操作的名称(可选).
返回:
取消的串联张量的元组.
enqueue
enqueue(
vals,
name=None
)
将一个元素排入此队列.
如果执行此操作时队列已满,则它将阻塞,直到该元素已被列入队列.
在运行时,如果队列 tf.QueueBase.close 在执行之前或执行期间,此操作可能会引发错误.如果在该操作运行之前队列被关闭,tf.errors.CancelledError 将会被引发.如果此操作被阻止,并且 有这两种情况:(a) 队列由关闭操作关闭,cancel_pending_enqueues=True,或(b)所述会话是 tf.Session.close,则 tf.errors.CancelledError 将提高.
参数:
- vals:张量,张量的列表或元组,或包含要排队的值的字典.
- name:操作的名称(可选).
返回:
将新的张量元组排入队列的操作.
enqueue_many
enqueue_many(
vals,
name=None
)
将零个或多个元素列入此队列.
此操作将每个组件张量沿第0维度切片,以创建多个队列元素.vals 中的所有张量必须在第0维度中具有相同的大小.
如果执行此操作时队列已满,则它将阻塞,直到所有元素均已排队.
在运行时,如果队列 tf.QueueBase.close 在执行之前或执行期间,此操作可能会引发错误.如果在该操作运行之前队列被关闭,将引发 tf.errors.CancelledError.如果此操作被阻止,并且会有两种情况:要么(a)所述队列由与关闭操作关闭cancel_pending_enqueues=True,或(b)所述会话是 tf.Session.close,则 tf.errors.CancelledError 将提高.
参数:
- vals:张量,张量的列表或元组,或从中取出队列元素的字典.
- name:操作的名称(可选).
返回:
将一批张量元组排入队列的操作.
from_list
@staticmethod
from_list(
index,
queues
)
从 queues[index] 使用队列引用创建一个队列.
参数:
- index:一个整数标量张量,用于确定所选的输入.
- queues:QueueBase 对象列表.
返回:
一个 QueueBase 对象.
可能引发的异常:
- TypeError:什么时候 queues 不是 QueueBase 对象列表,或者什么时候 queues 的数据类型不一样.
is_closed
is_closed(name=None)
如果队列关闭,则返回 true.
如果队列已关闭,则此操作返回 true,如果队列已打开,则返回 false.
参数:
- name:操作的名称(可选).
返回:
如果队列已关闭,则为 true;如果队列已打开,则为 false.
size
size(name=None)
计算此队列中的元素数量.
参数:
- name:操作的名称(可选).
返回:
包含此队列中元素数量的标量张量.