TensorFlow:是否可以使用 for 循环将函数映射到数据集?

TensorFlow: Is it possible to map a function to a dataset using a for-loop?

我有一个 tf.data.TFRecordDataset 和一个(计算量大的)函数,我想将其映射到它。我使用 TensorFlow 1.12 和 eager execution,函数使用 NumPy ndarray 解释我数据集中的张量,使用 EagerTensor.numpy()。但是,提供给 tf.Dataset.map() 的函数内部代码不会立即执行,这就是 .numpy() 转换在那里不起作用并且 .map() 不再是一个选项的原因。是否可以循环遍历数据集并修改其中的示例?简单地分配给它们似乎不起作用。

不,不完全是。

数据集本质上是延迟计算的,不能以这种方式分配 - 从概念上尝试将其视为管道而不是变量:读取每个值,通过任何 map() 操作传递,batch() 操作等,并根据需要浮出水面模型。 "assign" 一个值是将它写入磁盘中的 .tfrecord 文件并且不太可能永远被支持(这些文件专门设计为 fast-read 而不是 random-accessed) .

您可以改为使用 TensorFlow 来执行 pre-processing 并使用 TfRecordWriter 写入新的 tfrecord 并完成昂贵的 pre-processing 然后使用这个新数据集作为输入到你的模型。如果您有可用的磁盘 space,这可能是您的最佳选择。