tf.queue

2022-09-03 22:04:12 浏览数 (2)

一、概述

tf的公共API。队列的名称空间。

  • FIFOQueue:按先入先出顺序对元素进行排队的队列实现。
  • PaddingFIFOQueue:一个FIFOQueue支持通过填充来批量处理可变大小的张量。
  • PriorityQueue:按优先级顺序对元素进行排队的队列实现。
  • QueueBase:队列实现的基类。
  • RandomShuffleQueue:按随机顺序对元素进行排队的队列实现。

二、tf.queue.FIFOQueue

按先入先出顺序对元素进行排队的队列实现。继承自:QueueBase

别名:

  • tf.compat.v1.FIFOQueue
  • tf.compat.v1.queue.FIFOQueue
  • tf.compat.v2.queue.FIFOQueue

看到tf.queue。QueueBase获取该类上方法的描述。

1、__init__

代码语言:javascript复制
__init__(
    capacity,
    dtypes,
    shapes=None,
    names=None,
    shared_name=None,
    name='fifo_queue'
)

创建一个队列,该队列以先入先出的顺序将元素从队列中取出。FIFOQueue具有有限的容量;支持多个并发的生产者和消费者;并提供准确的一次交货。FIFOQueue包含一个包含最多容量元素的列表。每个元素都是一个定长张量元组,张量的d类型由d类型描述,其形状由shapes参数可选地描述。如果指定了shapes参数,则队列元素的每个组件必须具有各自的固定形状。如果未指定,则不同的队列元素可能具有不同的形状,但是不允许使用dequeue_many。

参数:

  • capacity:一个整数。可能存储在此队列中的元素数量的上限。
  • dtypes: DType对象的列表。类型的长度必须等于每个队列元素中张量的数量。
  • shapes:(可选)具有与dtypes相同长度或没有长度的完全定义的TensorShape对象的列表。
  • names:(可选)。指定队列中与dtypes相同或没有相同长度的组件的字符串列表。如果指定了dequeue方法,则返回一个名称为键的字典。
  • shared_name:(可选)。如果非空,则此队列将在多个会话之间以给定名称共享。
  • name:队列操作的可选名称。

2、属性

dtypes

  • 队列元素的每个组件的dtypes列表。

name

  • 底层队列的名称。

name

  • 队列元素的每个组件的名称列表。

queue_ref

  • 底层队列引用。

shapes

  • 队列元素的每个组件的形状列表。

3、close

代码语言:javascript复制
close(
    cancel_pending_enqueues=False,
    name=None
)

关闭此队列。这个操作表明,在给定队列中不再有元素进入队列。后续的enqueue和enqueue_many操作将失败。如果队列中保留足够的元素,后续的dequeue和dequeue_many操作将继续成功。随后dequeue和dequeue_许多本来会阻塞等待更多元素的操作(如果没有调用close)现在将立即失败。如果cancel_pending_enqueues为真,所有挂起的请求也将被取消。

参数:

  • cancel_pending_enqueues:(可选)。一个布尔值,默认为False(如上所述)。
  • name:操作的名称(可选)。

返回值:

  • 关闭队列的操作。

4、dequeue

代码语言:javascript复制
dequeue(name=None)

从该队列中删除一个元素。如果该操作执行时队列为空,它将阻塞,直到有一个元素要退出队列。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列已关闭,则队列为空,并且没有可以满足此请求的挂起的入队列操作tf.errors。将会产生OutOfRangeError。如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • name:操作的名称(可选)。

返回值:

  • 已退出队列的张量元组。

5、dequeue_many

代码语言:javascript复制
dequeue_many(
    n,
    name=None
)

从该队列中删除队列并连接n个元素。该操作沿着第0维将队列元素分量张量连接起来,形成单个分量张量。dequeued元组中的所有组件的第0维的大小都是n。如果队列已关闭,且剩下的元素少于n个,则会引发OutOfRange异常。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列已关闭,则该队列包含的元素少于n个,并且没有任何挂起的enqueue操作可以满足该请求tf.errors。将会产生OutOfRangeError。如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • n:一个标量张量,包含要退出队列的元素数。
  • name:操作的名称(可选)。

返回值:

  • 已退出队列的连接张量列表。

6、dequeue_up_to

代码语言:javascript复制
dequeue_up_to(
    n,
    name=None
)

从该队列中删除队列并连接n个元素。注意,并非所有队列都支持此操作。如果队列不支持DequeueUpTo,则tf.error。UnimplementedError。该操作沿着第0维将队列元素分量张量连接起来,形成单个分量张量。如果队列没有关闭,则退队列元组中的所有组件的第0维大小都为n。如果队列已关闭,且剩余元素大于0但小于n,则不会引发tf.errors。像tf.QueueBase.dequeue_many这样的OutOfRangeError会立即返回小于n个元素。如果队列已关闭,且队列中还剩0个元素,则出现tf.errors。OutOfRangeError就像dequeue_many一样被抛出。否则,该行为与dequeue_many相同。

参数:

  • n:一个标量张量,包含要退出队列的元素数。
  • name:操作的名称(可选)。

返回值:

  • 已排出队列的连接张量的元组。

7、enqueue

代码语言:javascript复制
enqueue(
    vals,
    name=None
)

将一个元素注册到此队列。如果执行此操作时队列已满,则它将阻塞,直到元素已进入队列。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列在此操作运行之前关闭,tf.errors。CancelledError将被提升。如果这个操作被阻塞,并且(i)队列被cancel_pending_enqueues=True的关闭操作关闭,或者(ii)如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • vals:张量,张量的列表或元组,或包含要排队的值的字典。
  • name:操作的名称(可选)。

返回值:

  • 将一个新的张量元组放入队列的操作。

8、from_list

代码语言:javascript复制
from_list(
    index,
    queues
)

使用队列[索引]中的队列引用创建队列。

参数:

  • index:一个整数标量张量,它决定被选中的输入。
  • queues:QueueBase对象的列表。

返回值:

  • 一个QueueBase对象。

9、is_closed

代码语言:javascript复制
is_closed(name=None)

如果队列已关闭,则返回true。如果队列关闭,此操作返回true;如果队列打开,则返回false。

参数:

  • name:操作的名称(可选)。

返回值:

  • 如果队列关闭,则为True;如果队列打开,则为false。

10、size

代码语言:javascript复制
size(name=None)

计算此队列中的元素数量。

参数:

  • name:操作的名称(可选)。

返回值:

  • 包含该队列中元素数量的标量张量。

二、tf.queue.PaddingFIFOQueue

一个FIFOQueue,它支持通过填充来批量处理可变大小的张量。

继承自:QueueBase

别名:

  • tf.compat.v1.PaddingFIFOQueue
  • tf.compat.v1.io.PaddingFIFOQueue
  • tf.compat.v1.queue.PaddingFIFOQueue
  • tf.compat.v2.queue.PaddingFIFOQueue

PaddingFIFOQueue可以包含动态形状的组件,同时还支持dequeue_many。有关详细信息,请参见构造函数。

1、__init__

代码语言:javascript复制
__init__(
    capacity,
    dtypes,
    shapes,
    names=None,
    shared_name=None,
    name='padding_fifo_queue'
)

创建一个队列,该队列以先入先出的顺序将元素从队列中取出。一个PaddingFIFOQueue具有有限的容量;支持多个并发的生产者和消费者;并提供准确的一次交货。一个PaddingFIFOQueue包含一个包含最多容量元素的列表。每个元素都是一个定长张量元组,其d类型由d类型描述,其形状由shapes参数描述。必须指定形状参数;队列元素的每个组件必须具有各自的形状。通过将任何形状维度设置为None,可以允许固定秩但大小可变的形状。在这种情况下,输入的形状可能会随着给定的维度而变化,dequeue_many将用零填充给定维度,直到指定批处理中所有元素的最大形状。

参数:

  • capacity:一个整数。可能存储在此队列中的元素数量的上限。
  • dtypes: DType对象的列表。类型的长度必须等于每个队列元素中张量的数量。
  • shapes:与dtypes长度相同的TensorShape对象列表。TensorShape中包含None值的任何维度都是动态的,并且允许在该维度中以可变大小将值排队。
  • names:(可选)。指定队列中与dtypes相同或没有相同长度的组件的字符串列表。如果指定了dequeue方法,则返回一个名称为键的字典。
  • shared_name:(可选)。如果非空,则此队列将在多个会话之间以给定名称共享。
  • name:队列操作的可选名称。

可能产生的异常:

  • ValueError: If shapes is not a list of shapes, or the lengths of dtypes and shapes do not match, or if names is specified and the lengths of dtypes and names do not match.

2、性质

dtypes

  • 队列元素的每个组件的dtypes列表。

name

  • 底层队列的名称。

name

  • 队列元素的每个组件的名称列表。

queue_ref

  • 底层队列引用。

shape

  • 队列元素的每个组件的形状列表。

3、close

代码语言:javascript复制
close(
    cancel_pending_enqueues=False,
    name=None
)

关闭此队列。这个操作表明,在给定队列中不再有元素进入队列。后续的enqueue和enqueue_many操作将失败。如果队列中保留足够的元素,后续的dequeue和dequeue_many操作将继续成功。随后dequeue和dequeue_许多本来会阻塞等待更多元素的操作(如果没有调用close)现在将立即失败。如果cancel_pending_enqueues为真,所有挂起的请求也将被取消。

参数:

  • cancel_pending_enqueues:(可选)。一个布尔值,默认为False(如上所述)。
  • name:操作的名称(可选)。

返回值:

  • 关闭队列的操作。

4、dequeue

代码语言:javascript复制
dequeue(name=None)

从该队列中删除一个元素。如果该操作执行时队列为空,它将阻塞,直到有一个元素要退出队列。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列已关闭,则队列为空,并且没有可以满足此请求的挂起的入队列操作tf.errors。将会产生OutOfRangeError。如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • name:操作的名称(可选)。

返回值:

  • 已退出队列的张量元组。

5、dequeue_many

代码语言:javascript复制
dequeue_many(
    n,
    name=None
)

从该队列中删除队列并连接n个元素。该操作沿着第0维将队列元素分量张量连接起来,形成单个分量张量。dequeued元组中的所有组件的第0维的大小都是n。如果队列已关闭,且剩下的元素少于n个,则会引发OutOfRange异常。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列已关闭,则该队列包含的元素少于n个,并且没有任何挂起的enqueue操作可以满足该请求tf.errors。将会产生OutOfRangeError。如果会话是tf.Session。如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • n:一个标量张量,包含要退出队列的元素数。
  • name:操作的名称(可选)。

返回值:

  • 已退出队列的连接张量列表。

6、dequeue_up_to

代码语言:javascript复制
dequeue_up_to(
    n,
    name=None
)

从该队列中删除队列并连接n个元素。注意,并非所有队列都支持此操作。如果队列不支持DequeueUpTo,则tf.error。UnimplementedError。该操作沿着第0维将队列元素分量张量连接起来,形成单个分量张量。如果队列没有关闭,则退队列元组中的所有组件的第0维大小都为n。如果队列已关闭,且剩余元素大于0但小于n,则不会引发tf.errors。像tf.QueueBase.dequeue_many这样的OutOfRangeError会立即返回小于n个元素。如果队列已关闭,且队列中还剩0个元素,则出现tf.errors。OutOfRangeError就像dequeue_many一样被抛出。否则,该行为与dequeue_many相同。

参数:

  • n:一个标量张量,包含要退出队列的元素数。
  • name:操作的名称(可选)。

返回值:

  • 已排出队列的连接张量的元组。

7、enqueue

代码语言:javascript复制
enqueue(
    vals,
    name=None
)

将一个元素注册到此队列。如果执行此操作时队列已满,则它将阻塞,直到元素已进入队列。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列在此操作运行之前关闭,tf.errors。CancelledError将被提升。如果这个操作被阻塞,并且(i)队列被cancel_pending_enqueues=True的关闭操作关闭,或者(ii)如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • vals:张量,张量的列表或元组,或包含要排队的值的字典。
  • name:操作的名称(可选)。

返回值:

  • 将一个新的张量元组放入队列的操作。

8、enqueue_many

代码语言:javascript复制
enqueue_many(
    vals,
    name=None
)

将零个或多个元素排队到此队列。该操作沿着第0维对每个组件张量进行切片,从而生成多个队列元素。瓦尔斯中的所有张量在第0维中都必须有相同的大小。如果在执行此操作时队列已满,它将阻塞,直到所有元素都进入队列。在运行时,如果队列是tf.QueueBase,此操作可能会引发错误。在执行之前或执行期间关闭。如果队列在此操作运行之前关闭,tf.errors。CancelledError将被提升。如果这个操作被阻塞,并且(i)队列被cancel_pending_enqueues=True的关闭操作关闭,或者(ii)如果会话是tf.Session,将报tf.errors.CancelledError错误。

参数:

  • vals:张量,张量的列表或元组,或从队列元素中获取的字典。
  • name:操作的名称(可选)。

返回值:

  • 将一批张量元组排队到队列的操作。

0 人点赞