tensorflow-队列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow-队列相关的知识,希望对你有一定的参考价值。
dequeue_up_to
?
dequeue_up_to(
? ? n,
? ? name=None
)
从这个队列中取出并连接n个元素。
注意,不是所有队列都支持此操作。如果队列不支持DequeueUpTo,则出现tf.errors.UnimplementedError。
这个操作沿着第0维串联队列元素分量张量,形成单个分量张量。如果队列没有被关闭,那么在队列元组中的所有组件的大小都是第0维的n。
如果队列是关闭的,并且有大于0但小于n个元素,那么将立即返回小于n个元素,而不是像tf.QueueBase.dequeue_many那样引发tf.error . outofrangeerror。。如果队列是关闭的,并且队列中还剩下0个元素,那么tf.errors.OutOfRangeError将像在dequeue_many一样抛出,否则,该行为与dequeue_many是相同的。
参数:
n: 一个标量Tensro,包括需要出列的元素数量
name: 操作名字(可选)
返回:
被出队的连接张量的元组。
enqueue
?
enqueue(
? ? vals,
? ? name=None
)
将一个元素放入这个队列。
如果执行此操作时队列已满,它将阻塞,直到元素被加入队列。
在运行时,如果队列是?tf.QueueBase.close,则此操作可能引发错误。队列在执行之前或执行期间关闭,tf.errors.CancelledError将触发。如果这个操作被阻塞,或者(i)队列被cancel_pending_enqueues=True的关闭操作关闭或(ii)会话是tf.Session.close、tf.errors。tf.errors.CancelledError错误将被提升。
参数:
vals: 张量,张量的列表或元组,或包含要加入的值的字典。
name: 操作的名称(可选)。
返回:
将新的张量元组排队到队列中的操作。
enqueue_many
?
enqueue_many(
? ? vals,
? ? name=None
)
将零个或多个元素放入此队列。
这个操作沿着第0维对每个分量张量进行切片,以生成多个队列元素。vals中的所有张量在第0维上必须具有相同的大小。
如果执行此操作时队列已满,它将阻塞,直到所有元素都已加入队列。
在运行时,如果队列是tf.QueueBase.close,则在执行之前或执行期关闭此操作可能引发错误。如果在此操作运行之前关闭队列,tf.errors.CancelledError触发。如果这个操作被阻塞,或者(i)队列被cancel_pending_enqueues=True的关闭操作关闭,或者(ii)会话是tf.Session.close、tf.errors,tf.errors.CancelledError?错误将被触发。
参数:
vals: 一个tensor,tensors元组的列表或从中取队列元素字典。
name: 操作名字(可选)
返回:
入一批tensors元组到队列的操作
from_list
?
from_list(
? ? index,
? ? queues
)
使用queues[index]中的队列引用创建一个队列。
参数:
queues:一个整数标量张量,它决定选择的输入。
queues:QueueBase对象的列表。
返回:
一个QueueBase对象。
Raises:
TypeError: 当队列不是QueueBase对象的列表时,或者当队列的数据类型不完全相同时。
is_closed
is_closed(name=None)
如果队列关闭,返回true。
如果队列是关闭的,此操作返回true;如果队列是打开的,则返回false。
参数:
name: 操作名字(可选)
返回:
如果队列是关闭的,为True;如果队列是打开的,为false。
size
?
size(name=None)
计算这个队列中的元素数量。
参数:
name: 操作的名称(可选)。
返回:
一个标量张量,包含这个队列中的元素数量。
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 6 10:16:37 2018
@author: myhaspl
@email:[email protected]
"""
import tensorflow as tf
q=tf.RandomShuffleQueue(capacity=10,min_after_dequeue=2,dtypes="float")
with tf.Session() as sess:
for i in range(0,10):
sess.run(q.enqueue(i))
for i in range(0,8):
print sess.run(q.dequeue())
4.0
5.0
8.0
7.0
3.0
0.0
2.0
1.0
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 6 10:16:37 2018
@author: myhaspl
@email:[email protected]
"""
import tensorflow as tf
q=tf.RandomShuffleQueue(capacity=20,min_after_dequeue=2,dtypes="float")
with tf.Session() as sess:
for i in range(0,12):
sess.run(q.enqueue(i))
for i in range(0,12):
print sess.run(q.dequeue())
因为需要保留2个元素,所以最后2个元素无法出列,导致阻塞
10.0
11.0
2.0
7.0
4.0
6.0
3.0
1.0
8.0
0.0
使用队列管理器
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 6 10:16:37 2018
@author: myhaspl
@email:[email protected]
"""
import tensorflow as tf
import numpy as np
q=tf.RandomShuffleQueue(capacity=200,min_after_dequeue=2,dtypes="float")
counter=tf.Variable(0.)
increment_op=tf.assign_add(counter,tf.constant(1.0))
enqueue_op=q.enqueue([counter])
init=tf.global_variables_initializer()
qr=tf.train.QueueRunner(q,enqueue_ops=[increment_op,enqueue_op]*1)
#主线程
with tf.Session() as sess:
sess.run(init)
enqueue_threads=qr.create_threads(sess,start=True)#启动入队线程
for i in range(0,10):
print sess.run(q.dequeue())
6.0
12.0
20.0
27.0
36.0
49.0
57.0
66.0
76.0
81.0
队列没能按我们期待的自然数列输出,且线程被阻断。
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 6 10:16:37 2018
@author: myhaspl
@email:[email protected]
"""
import tensorflow as tf
import numpy as np
q=tf.RandomShuffleQueue(capacity=200,min_after_dequeue=2,dtypes="float")
#x=np.random.randint(100,size=100)
counter=tf.Variable(0.)
increment_op=tf.assign_add(counter,tf.constant(1.0))
enqueue_op=q.enqueue([counter])
init=tf.global_variables_initializer()
qr=tf.train.QueueRunner(q,enqueue_ops=[increment_op,enqueue_op]*1)
#主线程
with tf.Session() as sess:
sess.run(init)
coord=tf.train.Coordinator()#协调器,协调线程间的关系。
enqueue_threads=qr.create_threads(sess,coord=coord,start=True)#启动入队线程
for i in range(0,10):
print sess.run(q.dequeue())
coord.request_stop()#通知其它线程关闭
coord.join(enqueue_threads)#关闭其它线程后,合并到主线程
4.0
15.0
24.0
36.0
46.0
57.0
68.0
78.0
89.0
98.0
以上是关于tensorflow-队列的主要内容,如果未能解决你的问题,请参考以下文章