阅读(7.2k) 书签 (0)

TensorFlow队列函数:tf.QueueBase

2018-11-21 11:40 更新
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:操作的名称(可选).

返回:

包含此队列中元素数量的标量张量.