一、概述
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:操作的名称(可选)。
返回值:
- 将一批张量元组排队到队列的操作。