tensorflow随笔-队列(1)

版权声明:本博客所有文章版权归博主刘兴所有,转载请注意来源 https://blog.csdn.net/AI_LX/article/details/89702791

tf.FIFOQueue
Class FIFOQueue
先进先出的队列

属性
dtypes
队列元素的每个组件的dtypes列表

name
队列名字

基础队列的名称。

names
队列元素的每个组件的名字列表

queue_ref
基础队列引用

shapes
队列元素的每个组件的尺寸列表

Methods
init

init(
capacity,
dtypes,
shapes=None,
names=None,
shared_name=None,
name=‘fifo_queue’
)

创建一个先进先出的队列。

一个FIFOQueue具有有限的容量;支持多个并发生产者和消费者;并且提供恰好一次传递。

一个FIFOQueue持有一个至多容量元素的列表。每个元素是一个固定长度的张量元组,其dtype由dtypes描述,其形状可选地由shapes参数描述。

如果指定了shapes参数,则队列元素的每个组件必须具有各自的固定形状。如果未指定,则不同的队列元素可能具有不同的形状,但是不允许使用dequeue_many。

参数:

capacity: 整数。可存储在该队列中的元素数量的上限。
dtypes: 一个dType对象的列表。dtypes的长度必须等于每个队列元素中张量的数量。
shapes: (可选) 一个完全定义的TensorShape对象的列表,其长度与dtypes相同,或者None。A
names: (Optional.) 可选的)一个字符串列表,命名为与dtypes相同的队列中的组件,或者None。如果指定了dequeue E方法,返回一个字典,名称为键。
shared_name: (Optional.)(可选)。如果非空,这个队列将在给定的名称下在多个会话中共享。
name: 队列操作的可选名称。

close
close(
cancel_pending_enqueues=False,
name=None
)

关闭先进先出队列

此操作指示在给定队列中不再有元素入队(enqueue)。随后的enqueue队列和enqueue_many将失败,如果队列中有足够的元素,则后续的dequeue(出队)和dequeue_many操作将继续成功。随后,如果dequeue和dequeue_many操作阻塞等待更多元素(如果close没有被调用)将立即失败。

如果cancel_pending_enqueues是True,所有未决请求也将被取消。

参数:

cancel_pending_enqueues: (可选) 一个boolean,默认为False
name: 操作的名字(可选)
返回:

关闭队列的操作

dequeue
dequeue(name=None)

从队列中出列一个元素。

如果队列在执行此操作时是空的,它将阻塞直到有一个元素出列。

在运行时,如果队列在执行之前或执行过程中的队列是.tf.QuealBase.close,则此操作可能会引发错误。如果队列被关闭,队列是空的,并且没有可以满足此请求的挂起队列操作,会触发tf.Error。如果会话是tf.Session.close,tf.errors.CancelledError 将触发。

参数:

name: 操作名(可选)
返回:

出列的张量的元组

dequeue_many
dequeue_many(
n,
name=None
)

将队列中的n个元素出列并连接起来。

此操作将队列元素组件张量沿着零维度连接成单个组件张量。在零个维度中,出列元组中的所有组件的大小都为n。如果队列被关闭,并且还有小于n个元素,则引发一个OutOfRange异常。

在运行时,如果队列是tf.QueueBase.close。在执行之前或执行期间关闭,则此操作可能会引发错误。如果队列关闭,则队列包含少于n个元素,并且没有可以满足此请求的挂起的入列操作,即tf.error.OutOfRangeErrouqr。如果这个队列是tf.Session.close, tf.errors.CancelledError将被抛出。

参数:

n: 一个scalar Tensor,包括入列元素的数目
name: 操作的名字(可选)
返回:

tensors拼接生成的列表,这些列表将出列

enqueue

enqueue(
vals,
name=None
)

在队列里入列一个元素

当操作执行时,如果这个队列是满的则它将阻止,直到元素已被入队。

在运行时,如果队列在执行之前或执行过程中的队列是tf.QueueBase.close,则此操作可能会引发错误tf.errors.CancelledError。如果该操作被阻塞,并且要么(i)队列通过具有cancel_pending_enque.=True的闭合操作关闭,要么(ii)会话为tf.Session.close、f.errors.CancelledError将被触发。

参数:

vals:一个tensor,tensors的元组列表 ,或包含入队值的字典。
name: 操作名字(可选)
返回:

将张量的新元组入列到队列的操作。

enqueue_many

enqueue_many(
vals,
name=None
)

将零或多个元素入队到此队列

该操作将每个分量张量沿零维切片,以形成多个队列元素。在零维中,所有在vals中的张量必须具有相同的大小。

如果此操作执行时队列已满,则它将阻塞,直到所有元素都已入队。

在运行时,如果队列在执行之前或执行过程中的队列是tf.QueueBase.close,如果在运行之前关闭该队列,则将引发tf.errors.CancelledError。如果该操作被阻塞,并且要么(i)队列通过具有cancel_pending_enqueues=True的闭合操作关闭,要么(ii)会话为tf.Session.close、tf.errors.CancelledError将被引发。

参数:

vals: 一个tensor,tensors元组的列表,或一个字典 从中获取队列元素的字典
name: A name for the operation (optional).
返回:

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

from_list

from_list(
index,
queues
)

从queues[index]中使用队列引用创建队列

参数:

index: 一个整数标量,决定输入选择范围
queues: 一个QueueBase对象列表
返回:

一个QueueBase对象

抛出:

TypeError: 当queues不是queues对象的列表,或当queues数据类型并非都相同。
is_closed

is_closed(name=None)

如果队列关闭,返回true。

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

参数:

name: 操作名称(可选)
返回:

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

size

size(name=None)

计算队列元素数量

参数:

name: 操作名(可选)
返回:

标量张量,包括队列元素数量

dequeue_up_to

dequeue_up_to(
n,
name=None
)

从队列中出列并拼接n个元素。

注:此操作不受所有队列的支持。如果队列不支持DequeueUpTo,则引发一个tf.errors.UnimplementedError。

此操作将队列元素组件张量沿着零维连接成单个组件张量。如果队列尚未关闭,则在零维度中,队列中的元组中的所有组件都将具有大小N。

如果队列关闭,并且剩余的元素多于0但少于n个,则立即返回少于n个的元素,而不是引发tf.error.OutOfRangeError,像tf.QueueBase.dequeue_many。如果队列关闭,并且队列中剩余的元素为0,tf.errors.OutOfRangeError将被抛出,就像就像dequeue_many中一样。否则行为与dequeue_many一样。

参数:

n: 一个标量Tensor,包含出列元素的数目。
name: A name for the operation (optional).
返回:

拼接出列tensors的元组,

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import tensorflow as tf

n = 100

xQueue=tf.FIFOQueue(100,tf.int32)

with tf.Session() as sess:
    for i  in xrange(n):
        if i%3==0:
            sess.run(xQueue.enqueue(i))
    xLen=sess.run(xQueue.size())
    mySum=0
    print
    for i in range(xLen):
        myx=sess.run(xQueue.dequeue())
        print myx,
        mySum+=myx

    print 
    print mySum

0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
1683
求被3整除的100以内数之和

下面列出1-4的数字

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import tensorflow as tf

with tf.Session() as sess:
    queue = tf.FIFOQueue(100, dtypes=[tf.int32], shapes=[()])
    enqueue_op = queue.enqueue_many([[1, 2,3,4]])
    inputs = queue.dequeue_many(4)
    sess.run(enqueue_op)
    sess.run(enqueue_op)
    print sess.run(inputs)

[1 2 3 4]

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import tensorflow as tf

n = 100

xQueue=tf.FIFOQueue(100,dtypes=[tf.int32],shapes=[])

with tf.Session() as sess:
    for i  in xrange(n):
        if i%3==0:
            sess.run(xQueue.enqueue(i))
    xLen=sess.run(xQueue.size())
    myx=sess.run(xQueue.dequeue_many(xLen))
    print myx    
    print sum(myx)

[ 0 3 6 … 93 96 99]
1683
上面求100以内被3整除的数之和

猜你喜欢

转载自blog.csdn.net/AI_LX/article/details/89702791
今日推荐