TensorFlow的数据并行读取:reader, decode, 与 batch_join

本文详细探讨了在TensorFlow中如何实现数据并行读取,包括使用reader、decoder和batch_join函数。通过构建tensor list并开多线程,实现了文件和文件内数据的并行读取。文章分析了多个reader、多个decoder以及两者结合的并行效果,并提供了代码验证不同的并行策略。
摘要由CSDN通过智能技术生成

为了实现TensorFlow的数据并行读取,我们常常为将一个tensor list传入batch_join函数,该函数会为list中的每个元素开一个新线程进行数据读取。构建tensor list的方法有很多:新开很多个reader,开一个reader然后新开很多个decoder,甚至新开很多个reader并新开很多个decoder。

它们的并行效果是不同的。

最基本的数据管道读取

TensorFlow中我们也许需要并行地读取数据,这个时候就需要用到tf的reader机制了。它的大概流程如下:

  1. 我们先有一个文件名列表
  2. 通过string_input_producer函数生成一个文件名队列
  3. 创建一个reader
  4. key,value = reader.read读取一行数据
  5. tensor = decode(value) 解析数据
  6. tf.train.batch(tensor) 构建batch

如上我们就可以构建起一个管道,将batch源源不断地输入到model graph中:

import tensorflow as tf


filenames = ['./data/A.csv', './data/B.csv', './data/C.csv', './data/D.csv']
filename_queue = tf.train.string_input_producer(filenames, shuffle=False)

reader = tf.TextLineReader()
key, value = reader.read(filename_queue)
example = tf.decode_csv(value, record_defaults=[[str(_)], ['null']])
batch = tf.train.batch(example, batch_size=10)

with tf.Session() as sess:
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    for i in range(10):
        v1, v2 = sess.run(batch)
        v = []
        for j in range(10):
            v.append(v1[j] + '_' + v2[j])
        print v

    coord.request_stop()
    coord.join(threads)

数据的并行读取——batch_join

如果我们想并行,一种高效的方式是构建tensor_list,然后使用batch_join函数:

batch = tf.train.batch_join(example_list, batch_size=10)

expamle_list是一个list,list的每一个元素都形如上一章节中的examplebatch_join会为每一个元素创建一个线程,并行地完成batch的读取。

博主的疑惑在这时产生,你如果查询网上的代码,会发现有很多种expamle_list的构建方式:

  1. 创建多个reader
  2. 创建多个decoder
  3. 创建多个reader然后每个reader创建多个decoder

它们是等效的吗?

多种expamle_list的构建方式:

if mode == 0:  # 多个decoder
    reader = tf.TextLineReader()
    key, value = reader.read(filename_queue)</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值