"""
队列和变量类似,都是计算图上有状态的节点,修改队列状态的操作主要有Enqueue、EnqueueMany、Dequeue。
多个线程可以同时向一个队列中写元素,或者从一个队列中读元素。
"""
import tensorflow as tf
# 最基本的例子
def fifo_queue():
# 创建一个队列,指定最多可以保存的元素数量和类型
queue = tf.FIFOQueue(5, dtypes=[tf.int32])
# 初始化队列中的元素
# init = queue.enqueue_many(([1, 2, 3, 4],))
init = queue.enqueue_many([[1, 2, 3, 4]])
# 出队列
x = queue.dequeue()
# 操作
y = x * x
# 入队列
power_enqueue = queue.enqueue([y])
with tf.Session() as sess:
init.run()
for _ in range(10):
v, __ = sess.run([x, power_enqueue])
print(v)
pass
pass
# 同时取多个队列
def fifo_queue_multi_queue():
# 创建一个队列,指定最多可以保存的元素数量和类型
queue = tf.FIFOQueue(5, dtypes=[tf.int32, tf.float32, tf.int32])#多个队列创建方式在于用列表表现
# 初始化队列中的元素
init = queue.enqueue_many([[1, 2, 3, 4], [1.0, 2.0, 3.0, 4.9], [1, 2, 3, 4]])
# 出队列,同步出队
x = queue.dequeue()
# 操作
#x_power = x[0] * x[0]
#y = [x_power, tf.cast(x_power, tf.float32) - x[1], x_power + x[2]]
# 入队列
#power_enqueue = queue.enqueue(y)
with tf.Session() as sess:
init.run()
for _ in range(4):
#v, __ = sess.run([x, power_enqueue])
v= sess.run([x])
print(v)
pass
pass
# 随机队列:从当前队列所有元素中随机选择一个,但是这个是同步随机的,也就是列表对应位置都是打包在一起的!
def random_shuffle_queue_multi_queue():
# 创建一个队列,指定最多可以保存的元素数量和类型
queue = tf.RandomShuffleQueue(5, min_after_dequeue=3, dtypes=[tf.int32, tf.float32, tf.int32])
# 初始化队列中的元素
init = queue.enqueue_many([[1, 2, 3, 4], [1.0, 2.0, 3.0, 4.9], [1, 2, 3, 4]])
# 出队列
x = queue.dequeue()
# 操作
#x_power = x[0] * x[0]
#y = [x_power, tf.cast(x_power, tf.float32) - x[1], x_power + x[2]]
# 入队列
power_enqueue = queue.enqueue(x)
with tf.Session() as sess:
init.run()
for _ in range(4):
v,__= sess.run([x,power_enqueue])
print(v)
pass
pass
if __name__ == '__main__':
random_shuffle_queue_multi_queue()
#fifo_queue_multi_queue()
tf队列使用
最新推荐文章于 2021-09-14 09:44:21 发布