python – 使用TensorFlow Dataset API和flat_map的并行线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用TensorFlow Dataset API和flat_map的并行线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2020字,纯文字阅读大概需要3分钟。
内容图文
![python – 使用TensorFlow Dataset API和flat_map的并行线程](/upload/InfoBanner/zyjiaocheng/701/2d64ffcba26841e49790202b7c3e05f2.jpg)
我正在将TensorFlow代码从旧的队列接口更改为新的Dataset API.使用旧接口,我可以为tf.train.shuffle_batch队列指定num_threads参数.但是,控制数据集API中线程数量的唯一方法似乎是使用num_parallel_calls参数在map函数中.但是,我正在使用flat_map函数,它没有这样的参数.
问题:有没有办法控制flat_map函数的线程/进程数?或者是否有方法将map与flat_map结合使用并仍然指定并行调用的数量?
请注意,并行运行多个线程至关重要,因为我打算在数据进入队列之前在CPU上运行大量预处理.
GitHub上有两篇(here和here)相关帖子,但我认为他们不回答这个问题.
这是我用例的最小代码示例:
with tf.Graph().as_default():
data = tf.ones(shape=(10, 512), dtype=tf.float32, name="data")
input_tensors = (data,)
def pre_processing_func(data_):
# normally I would do data-augmentation here
results = (tf.expand_dims(data_, axis=0),)
return tf.data.Dataset.from_tensor_slices(results)
dataset_source = tf.data.Dataset.from_tensor_slices(input_tensors)
dataset = dataset_source.flat_map(pre_processing_func)
# do something with 'dataset'
解决方法:
据我所知,目前flat_map不提供并行选项.
鉴于大部分计算是在pre_processing_func中完成的,您可以使用的解决方法是并行映射调用,然后进行一些缓冲,然后使用带有标识lambda函数的flat_map调用来处理输出的扁平化.
在代码中:
NUM_THREADS = 5
BUFFER_SIZE = 1000
def pre_processing_func(data_):
# data-augmentation here
# generate new samples starting from the sample `data_`
artificial_samples = generate_from_sample(data_)
return atificial_samples
dataset_source = (tf.data.Dataset.from_tensor_slices(input_tensors).
map(pre_processing_func, num_parallel_calls=NUM_THREADS).
prefetch(BUFFER_SIZE).
flat_map(lambda *x : tf.data.Dataset.from_tensor_slices(x)).
shuffle(BUFFER_SIZE)) # my addition, probably necessary though
注意(对我自己和试图理解管道的人):
由于pre_processing_func从初始样本开始生成任意数量的新样本(以形状矩阵(?,512)组织),因此需要使用flat_map调用将所有生成的矩阵转换为包含单个样本的数据集(因此为tf.data.在lambda中的Dataset.from_tensor_slices(x),然后将所有这些数据集展平为一个包含单个样本的大数据集.
对.shuffle()来说,将数据集或生成的样本打包在一起可能是一个好主意.
内容总结
以上是互联网集市为您收集整理的python – 使用TensorFlow Dataset API和flat_map的并行线程全部内容,希望文章能够帮你解决python – 使用TensorFlow Dataset API和flat_map的并行线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。