tf.Transform
の0.30
リリース以降、デフォルトの動作では、TF 2.x の動作が明示的に無効になっていない限り、TF 2.x SavedModel がエクスポートされます。このページでは、 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 モジュールの使用
TF 2.x ハブ モジュールは、 preprocessing_fn
がトレースされ、TF 2.x SavedModel としてエクスポートされる場合にのみ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 で「テーブルが初期化されていない」エラーが表示されます。
例外の例:
tensorflow.python.framework.errors_impl.FailedPreconditionError: Table not initialized.
Estimator ベースの Executor を使用した 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
スタンドアロン ライブラリとして使用する場合はforce_tf_compat_v1=True
tft_beam.Context
に渡すか、TFX の Transform コンポーネントに渡します。