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

标签 python tensorflow tensor map-function

我有一个 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/

相关文章:

python - 将 base64 编码的字符串转换为十六进制 int

python - read() 的文件大小限制?

python - 使用Python删除目录中的所有文件

tensorflow - 将 TensorFlow 损失全局目标 (recall_at_precision_loss) 与 Keras(非指标)一起使用

python - 如何将掩码应用于张量并保持其原始形状

debugging - 如何在Keras中调试自定义损失函数?

python - 将 StreamingHttpResponse 与 Django Rest Framework CSV 一起使用

python - 调用 "dense_features_5"层时遇到异常

python - Tensorflow:张量的单个元素连接期间出现 ZeroDivisionError

lua - Torch:如何按行对张量进行洗牌?