我有一个 tf.data.TFRecordDataset
和一个(计算成本较高的)函数,我想将其映射到它。我使用 TensorFlow 1.12 和 eager execution,该函数使用 EagerTensor.numpy()
对数据集中的张量进行 NumPy ndarray 解释。但是,提供给 tf.Dataset.map()
的函数内的代码不会立即执行,这就是 .numpy()
转换在那里不起作用的原因.map()
不再是一个选项。是否可以循环遍历数据集并修改其中的示例?简单地分配给它们似乎不起作用。
最佳答案
不,不完全是。
数据集本质上是延迟评估的,不能以这种方式分配 - 从概念上尝试将其视为管道而不是变量:每个值都被读取,并通过任何 map()
操作、batch() 操作等,并根据需要呈现给模型。 “分配”一个值是将其写入磁盘的 .tfrecord 文件中,并且不太可能受到支持(这些文件专门设计用于快速读取而不是随机访问)。
您可以改为使用 TensorFlow 进行预处理,并使用 TfRecordWriter
写入新的 tfrecord,完成昂贵的预处理,然后使用这个新数据集作为模型的输入。如果您有可用的磁盘空间,这可能是您的最佳选择。
关于python - TensorFlow:是否可以使用 for 循环将函数映射到数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56220696/