tf.queue

一、概述

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__

__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

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

dequeue(name=None)

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

参数:

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

返回值:

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

5、dequeue_many

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

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

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

from_list(
    index,
    queues
)

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

参数:

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

返回值:

  • 一个QueueBase对象。

9、is_closed

is_closed(name=None)

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

参数:

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

返回值:

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

10、size

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__

__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

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

dequeue(name=None)

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

参数:

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

返回值:

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

5、dequeue_many

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

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

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

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:操作的名称(可选)。

返回值:

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

9、from_list

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FIFO原理

    First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。FIFO(Fi...

    于小勇
  • Python按顺序读取文件夹中文件

    涉及到文件操作,我们有时候会读取一个文件夹中的所有的文件。这些文件可能是文件名完全混乱的,也可能是完全格式化的(如1.png,2.png...)。下面介绍Pyt...

    于小勇
  • python iter()与 __iter__()的区别

    由上可以看出来 iter()与iter()均产生迭代器,Iter()与__iter__ 则用于产生 iterator(迭代器)。

    于小勇
  • 快速入门系列--WCF--06并发限流、可靠会话和队列服务

    这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数...

    用户1216676
  • 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)

    数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用。因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队...

    lizelu
  • Java队列学习第一篇之列介绍

    队列大家都知道,但是在Java中队列分哪几种呢?清楚吗?都有哪些地方用到了队列呢?最常用的场景的就是消息中间件,比如各种MQ都是使用的队列来的。如果没有用过消息...

    凯哥Java
  • 三分钟基础:什么是队列?

    像线程池、异步队列、消息队列等有限的资源容器中,往往存储大量的任务事件,这些大量的任务事件需要进行有条理的进行任务分发以及各种情况处理,为了能够使得资源容器的正...

    帅地
  • 栈与队列:总结篇!

    相信不仅仅是C++中有这些问题,那么大家使用其他编程语言,也可以考虑一下这四个问题,栈和队列是如何实现的。

    代码随想录
  • AI_第一部分 数据结构与算法(8.队列)

    第四阶段我们进行深度学习(AI),本部分(第一部分)主要是对底层的数据结构与算法部分进行详尽的讲解,通过本部分的学习主要达到以下两方面的效果:

    还是牛6504957
  • 【数据结构(C语言版)系列三】 队列

    队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一...

    闪电gogogo

扫码关注云+社区

领取腾讯云代金券