多线程输入数据处理框架

队列与多线程

队列不就是一种数据结构,他更提供了多线程机制。队列也是TensorFlow多线程输入框架的基础。队列与变量类似,都是计算图上有状态的节点。修改队列的操作主要有Enqueue、EnqueueMany和Dequeue。

import tensorfllow as tf
q = tf.FIFOQueue(2,"int32")
init = q.enqueue_many(([0,10],))
x = q.dequeue()
y = x + 1
q_inc = q.enqueue([y])

with tf.Session() as sess:
    init.run()
    for _ in range(5)
    v,_ = sess.run([x,q_inc])
    print(v)

tf.FIFOQueue先进先出队列,RandonShuffleQueue打乱队列中的元素,每次出队列操作得到的是从当前队列所有元素中随机选择的一个。
队列不仅仅是一种数据结构,还是异步计算张量取值的一个重要机制。TensorFlow利用队列来实现多线程输入数据处理。

  • tf.Coordinator主要用于协同多个线程一起停止,并提供了should_stop、request_stop和join三个函数。

1.should_stop返回值为True时,退出当前线程。
2.启动的线程调用request_stop函数时,should_stop函数的返回值将被设置为True,从而同时终止其他线程。
3.join退出所有线程。

  • tf.QueueRunner主要用于启动多个线程来操作同一个队列,启动这些线程可以通过 tf.Coordinator统一管理

输入文件队列

tf.train.match_filenames_once函数获取符合一个正则表达式的所有文件,得到的文件列表可以通过tf.train.string_input_producer函数进行有效管理。
1.tf.train.string_input_producer函数会使用初始化时提供的文件列表创建一个输入队列,输入队列中的元素为文件列表中的所有文件。
2.tf.train.string_input_producer函数支持随机打乱文件列表中文件的出队顺序。当shuffle参数为True时,文件在加入队列之前会被打乱顺序。
3.tf.train.string_input_producer生成的输入队列可以同时被多个文件读取线程操作。
4.tf.train.string_input_producer函数可以设置num_epochs函数来限制加载初始文件列表的最大轮数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值