从 tf.Transform
的 0.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 环境下运行,您可以通过以下方式保留旧版行为
- 通过调用
tf.compat.v1.disable_v2_behavior()
在tf.Transform
中禁用 TF2。 - 如果您使用
tf.Transform
作为独立库或在 TFX 中使用 Transform 组件,则将force_tf_compat_v1=True
传递给tft_beam.Context
。