提供给`tf.data.Dataset.from_generator(...)`的map函数能否解析张量对象?

时间:2018-01-19 20:55:35

标签: python tensorflow dataset

我想创建一个tf.data.Dataset.from_generator(...)数据集。我需要传入Python generator

我想将以前数据集的属性传递给生成器,如下所示:

dataset = dataset.interleave(
  map_func=lambda x: tf.data.Dataset.from_generator(generator=lambda: gen(x), output_types=tf.int64),
  cycle_length=2
)

我定义gen(...)取值(这是指向某些数据的指针,例如gen知道如何访问的文件名。

这会失败,因为gen收到张量对象,而不是python / numpy值。

  

有没有办法将张量对象解析为gen(...)内的值?

交错生成器的原因是我可以使用其他数据集操作(例如.shuffle().repeat())操作数据指针/文件名列表,而无需将其烘焙到{{1函数,如果我直接从数据指针/文件名列表开始使用生成器,那将是必要的。

我想使用生成器,因为每个数据指针/文件名将生成大量数据值。

2 个答案:

答案 0 :(得分:1)

答案确实没有。以下是关于该问题的进一步发展的一些相关git问题(截至本文撰写时尚未公开)的参考:

https://github.com/tensorflow/tensorflow/issues/13101

https://github.com/tensorflow/tensorflow/issues/16343

答案 1 :(得分:1)

TensorFlow现在支持将张量参数传递给生成器:

def map_func(tensor):
    dataset = tf.data.Dataset.from_generator(generator, tf.float32, args=(tensor,))
    return dataset