import tensorflow as tf
Tensorflow有两种队列 Queue
类, 两者都继承与父类 tf.QueueBase
:
- 先进先出队列
tf.FIFOQueue
- 随机队列
tf.RandomShuffleQueue
队列与Op一样也是图中的一个节点, 类中的主要方法: 插入元素 queue.enqueue()
和取出元素 queue.dequeue()
返回一个Op, 也为图中的一个节点.
Queue
tf.FIFOQueue
- init()
'''
参数:
capacity: (must)整数, 队列的能容纳的最大元素的数量;
dtypes: (must)dtype list, 列表长度与队列中单个元素包含的Tensor数量相同, 对应每个Tensor的数据类型;
shapes: TensorShape list, 与dtypes类似, 长度与单个元素包含的Tensor数量相同, 对应每个Tensor的形状;
names: string list, 与dtypes和shapes类似, 长度与单个元素包含的Tensor数量相同, 对应每个Tensor的名称;
shared_name: 不为空, 则队列在给定的多个Session之间共享;
name: 此队列的名称;
'''
tf.RandomShuffleQueue
- init()
'''
性质: 出列时随机选择元素.
参数:
capacity: (must)队列长度;
min_after_dequeue: (must)队列中至少保留的元素的数量;
dtypes: (must)dtype list, 列表长度与队列中单个元素包含的Tensor数量相同, 对应每个Tensor的数据类型;
shapes: TensorShape list, 与dtypes类似, 长度与单个元素包含的Tensor数量相同, 对应每个Tensor的形状;
names: string list, 与dtypes和shapes类似, 长度与单个元素包含的Tensor数量相同, 对应每个Tensor的名称;
seed: 随机种子;
shared_name: 不为空, 则队列在给定的多个Session之间共享;
name: 此队列的名称;
'''
队列共同方法
- enqueue()
'''
作用: 入列单个元素.
参数:
vals: (must)入列元素; 根据队列的设置, 可能为单个Tensor, 或list/tuple of Tensor, 或根据names构成的[name: Tensor]键值对字典;
name: 这个入列Op的名称.
输出: Op, 入列Op.
'''
- enqueue_many()
'''
作用: 入列多个元素.
参数:
vals: (must)Tensor的传入形式与enqueue()方法相同, 不同的因为是插入多个元素, 所以此处的Tensor比队列规定的Tensor多一维;
对Tensor的第一位进行分割, 得到的多个Tensor是批量插入的元素;
因此此处的Tensor的第一维的大小表示的是批量插入的元素的数量;
name: 这个入列Op的名称.
输出: Op, 批量入列Op.
'''
queue = tf.FIFOQueue(10, dtypes=tf.float32)
en_op_1 = queue.enqueue([1.0])
# en_op_2 = queue.enqueue_many([1.0, 1.0, 2.0, 4.0, 5.0]) # 这样写会报错
en_op_2 = queue.enqueue_many([[1.0, 1.0, 2.0, 4.0, 5.0]])