首先,我将描述我的申请背景:
大约有500,000个视频作为avi文件保存在我的磁盘中,我将使用它们作为训练样本。要使用它们,我们可以将它们同时加载到内存中,然后将每个批处理馈送到模型中进行划分,这是最简单的方法。但是,我的记忆没有足以容纳整个加载。因此,我需要批量加载视频数据。但您知道,解码一批视频(此处需要64个)可能会花费大量时间,如果您依次进行解码,我们将在数据加载部分而不是计算上浪费大量时间。因此,实际上,我想批量并行加载数据,就像keras中的API fit_generator
一样。我想知道TensorFlow中是否存在现有方法。
感谢您的任何建议:)
PS:我以前是通过Python中的theading
包来实现这个想法的,有关更多信息,请访问https://github.com/FesianXu/Parallel-DataLoader-in-TensorFlow
当然,这只是一个玩具代码,也是临时性的。我想要一个更通用的解决方案,就像Keras中的fit_generator
一样。
答案 0 :(得分:1)
答案 1 :(得分:1)
看看tf.data.Dataset.from_generator
:
创建一个数据集,其元素由generator生成。
generator参数必须是一个可返回值的可调用对象 支持iter()协议的对象(例如生成器函数)。 生成器生成的元素必须与给定的兼容 output_types和(可选)output_shapes参数。
此示例说明如何使用tf.data.Dataset.map
和num_parallel_calls
参数https://github.com/tensorflow/tensorflow/issues/14448#issuecomment-349240274
更多信息:https://www.tensorflow.org/performance/datasets_performance#parallelize_data_transformation