【问题标题】:Most scalable way for using generators with tf.data ? tf.data guide says `from_generator` has limited scalability将生成器与 tf.data 一起使用的最可扩展方式? tf.data 指南说 `from_generator` 的可扩展性有限
【发布时间】:2020-03-26 14:22:29
【问题描述】:

tf.data 有一个 from_generator 初始化器,它看起来不像是可扩展的。来自官方指南

注意:虽然这是一种方便的方法,但它的局限性在于 可移植性和可扩展性。它必须在同一个 python 进程中运行 它创建了生成器,并且仍然受制于 Python GIL。

https://www.tensorflow.org/guide/data#consuming_python_generators

在官方文档中

注意:Dataset.from_generator() 的当前实现使用 tf.numpy_function 并继承了相同的约束。特别是,它 需要放置与数据集和迭代器相关的操作 与调用的 Python 程序在同一进程中的设备 数据集.from_generator()。生成器的主体不会被序列化 在 GraphDef 中,如果需要,则不应使用此方法 序列化您的模型并在不同的环境中恢复它。

注意:如果生成器依赖于可变的全局变量或其他 外部状态,请注意运行时可能会调用生成器 多次(为了支持重复数据集)并且在任何时候 调用 Dataset.from_generator() 和生产之间的时间 来自生成器的第一个元素。改变全局变量或 外部状态可能导致未定义的行为,我们建议您 在调用之前显式缓存生成器中的任何外部状态 Dataset.from_generator().

https://www.tensorflow.org/api_docs/python/tf/data/Dataset#from_generator

但是,生成器是在大量数据上进行训练的一种相当常见的方法。所以必须有一些替代的最佳实践,但官方的 Tensorflow 数据指南并没有提供任何关于这方面的信息。

【问题讨论】:

  • 你发现了什么有用的东西?

标签: python tensorflow keras generator tf.keras


【解决方案1】:

遍历您的生成器并将数据写入 TFRecord。然后使用 TFRecordDataset。这是指南。

https://www.tensorflow.org/tutorials/load_data/tfrecord

TF 旨在通过多 GPU 有效地使用这些类型的数据集。

将数据分片到磁盘也可以改进洗牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2016-02-18
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多