TensorFlow2.xでのtf.Transformの使用

tf.Transform0.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_featuresdrop_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_gziptft.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 コンポーネントに渡します。