使用 tf.Transform 与 TensorFlow 2.x

tf.Transform0.30 版本开始,默认行为是导出 TF 2.x SavedModel,除非显式禁用 TF 2.x 行为。本页提供使用 tf.Transform 将转换图导出为 TensorFlow 2.x SavedModel 的指南。

TF 2.x 中 tf.Transform 的新增功能

preprocessing_fn 中加载 Keras 模型

请使用 tft.make_and_track_object API 加载 Keras 模型,如下面的示例所示。

def preprocessing_fn(inputs):
  keras_model = tft.make_and_track_object(lambda: tf.keras.models.load_model(...), name='_unique_name')
  ...
  return {'keras_model_output': keras_model(inputs[...])}

使用 TF 2.x tf.hub 模块

只有当 preprocessing_fn 被跟踪并导出为 TF 2.x SavedModel 时,TF 2.x hub 模块才能在 tf.Transform 中使用(这是从 tensorflow_transform 0.30 开始的默认行为)。请使用 tft.make_and_track_object API 加载 tf.hub 模块,如下面的示例所示。

def preprocessing_fn(inputs):
  hub_module = tft.make_and_track_object(lambda: hub.load(...))
  ...
  return {'hub_module_output': hub_module(inputs[...])}

潜在的迁移问题

如果将现有的 tf.Transform 管道从 TF 1.x 迁移到 TF 2.x,可能会遇到以下问题

RuntimeError: preprocessing_fn 中分析器的顺序似乎是非确定性的。

在 TF 2.x 中,用户提供的 preprocessing_fn 会被跟踪多次。如果每次跟踪时遇到的 TFT 分析器顺序发生变化,就会引发此错误。可以通过消除 TFT 分析器调用顺序中的任何非确定性来解决此问题。

transform_raw_features 的输出不包含预期的特征。

示例异常

KeyError: \<feature key>

\<feature key> not found in features dictionary.

TFTransformOutput.transform_raw_features 忽略 drop_unused_features 参数,并表现得好像它是 True。请更新此 API 的输出字典的任何使用情况,以检查您尝试检索的键是否存在于其中。

tf.estimator.BaselineClassifier 看到 Table 未初始化错误。

示例异常

tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.

对基于 Estimator 的执行器的 Trainer 的支持是尽力而为的。虽然其他估算器可以工作,但我们已经看到 BaselineClassifier 中的表初始化问题。请 tf.Transform 中禁用 TF 2.x

已知问题/尚未支持的功能

尚不支持以 TFRecord 格式输出词汇表。

tfrecord_gzip 尚未支持作为 tft.vocabulary(和其他词汇表 API)中 file_format 参数的有效值。

保留旧版 tf.Transform 行为

如果您需要 tf.Transform 管道在非 TF 2.x 环境下运行,您可以通过以下方式保留旧版行为