tensorflow-队列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow-队列相关的知识,希望对你有一定的参考价值。

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 -*-
"""
Created on Thu Sep  6 10:16:37 2018
@author: myhaspl
"""
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 -*-
"""
Created on Thu Sep  6 10:16:37 2018
@author: myhaspl
"""
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 -*-
"""
Created on Thu Sep  6 10:16:37 2018
@author: [email protected]
"""
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整除的数之和

以上是关于tensorflow-队列的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow细节-P190-输入文件队列

tensorflow-队列

tensorflow读取数据

手写数字识别——基于全连接层和MNIST数据集

tensorflow-队列

tensorflow-队列