如何在张量流中并行加载数据?

时间:2018-07-16 08:06:38

标签: python tensorflow

首先,我将描述我的申请背景

大约有500,000个视频作为avi文件保存在我的磁盘中,我将使用它们作为训练样本。要使用它们,我们可以将它们同时加载到内存中,然后将每个批处理馈送到模型中进行划分,这是最简单的方法。但是,我的记忆没有足以容纳整个加载。因此,我需要批量加载视频数据。但您知道,解码一批视频(此处需要64个)可能会花费大量时间,如果您依次进行解码,我们将在数据加载部分而不是计算上浪费大量时间。因此,实际上,我想批量并行加载数据,就像keras中的API fit_generator一样。我想知道TensorFlow中是否存在现有方法。

感谢您的任何建议:)

PS:我以前是通过Python中的theading包来实现这个想法的,有关更多信息,请访问https://github.com/FesianXu/Parallel-DataLoader-in-TensorFlow

当然,这只是一个玩具代码,也是临时性的。我想要一个更通用的解决方案,就像Keras中的fit_generator一样。

2 个答案:

答案 0 :(得分:1)

Tensorflow具有用于此类事情的数据集API。

请参阅教程和API文档:

答案 1 :(得分:1)

看看tf.data.Dataset.from_generator

  

创建一个数据集,其元素由generator生成。

     

generator参数必须是一个可返回值的可调用对象   支持iter()协议的对象(例如生成器函数)。   生成器生成的元素必须与给定的兼容   output_types和(可选)output_shapes参数。

此示例说明如何使用tf.data.Dataset.mapnum_parallel_calls参数https://github.com/tensorflow/tensorflow/issues/14448#issuecomment-349240274

轻松并行化生成器

更多信息:https://www.tensorflow.org/performance/datasets_performance#parallelize_data_transformation