【问题标题】:on the fly generation with Dataset api tensorflow使用 Dataset api tensorflow 即时生成
【发布时间】:2017-11-15 22:57:05
【问题描述】:

我有一个产生特征和目标张量的函数。例如。

x,t = myfunc() ##x,t tensors

如何将其与 TensorFlow 的数据集 API 集成以进行持续训练?理想情况下,我想使用数据集来设置批处理、转换等内容。

为澄清而编辑:问题是我不仅想将 x 和 t 放在我的图表中,还想从它们中创建一个数据集,以便我可以使用我为(正常)有限数据集实现的相同数据集处理,我可以使用可初始化的迭代器加载到内存中并输入到同一个图中。

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    假设xttf.Tensor 对象,并且my_func() 构建了一个TensorFlow 图,您也许可以将以下方法与`Dataset.map() 一起使用:

    # Creates an infinite dataset with a dummy value. You can make this finite by
    # specifying an explicit number of elements to `repeat()`.
    dummy_dataset = tf.data.Dataset.from_tensors(0).repeat(None)
    
    # Evaluates `my_func` once for each element in `dummy_dataset`.
    dataset = dummy_dataset.map(lambda _: my_func())
    

    【讨论】:

    • 如果我想默认在 gpu 设备上进行 my_func() 的计算,我会将“with tf.device('/device:GPU:1'):”包装器放在您建议的第一条,第二条或两条线?这可能会或可能不会有所不同,但在我的情况下,“my_func()”实际上是另一个类的方法(即“my_class.my_func()”是我在你的代码中实际使用的)——我也有在实例化类时使用“with tf.device('/device:GPU:1'):”?
    【解决方案2】:

    如果 x 和 t 是张量,您可以通过调用 tf.data.Dataset.from_tensorstf.data.Dataset.from_tensor_slices(文档 here)来创建数据集。

    它们之间的区别在于from_tensors 将输入张量组合成数据集中的单个元素。 from_tensor_slices 为每个切片创建一个包含一个元素的数据集。

    【讨论】:

    • 如果我使用“from_tensors”然后对数据集进行批处理,它会多次调用 myfunc 吗?我不希望它只是重复相同的张量多次,如果这有意义的话?
    • 不,我认为“from_tensors”不会多次调用 myfunc。如果您想从生成器函数创建数据集,可以调用 Dataset.from_generator。
    • 对,但 Dataset.from_generator 不接受创建 tensor 对象的生成器
    • 你是说你想创建一个每次调用 myfunc 时张量都会改变的数据集?如果是这样,您可以创建一个数据集,然后在可用时连接更多数据。
    • 不,我想使用类似 from_generator 的东西,但略有不同。我有两个张量 x 和 t,每次在图表中调用它们时,它们都会评估新的训练数据。你可能会把它们想象成 x = tf.random_uniform(args), t = tf.random_uniform(args)。这有意义吗?
    猜你喜欢
    • 2019-09-24
    • 2018-04-06
    • 2018-03-06
    • 2019-07-07
    • 1970-01-01
    • 2019-11-15
    • 2019-01-28
    • 2018-08-11
    • 2018-03-03
    相关资源
    最近更新 更多