Path: blob/master/site/ja/tfx/tutorials/transform/simple.ipynb
38074 views
Copyright 2021 The TensorFlow Authors.
TensorFlow Transform を使用したデータの前処理
TensorFlow Extended (TFX) の特徴エンジニアリングコンポーネント
注:この例は、Jupyter スタイルのノートブックで今すぐ実行できます。セットアップは必要ありません。「Google Colab で実行」をクリックするだけです
この Colab ノートブックの例では、TensorFlow Transform(tf.Transform)を使用して、簡単にデータを前処理する方法を紹介します。ここではモデルのトレーニングと本番環境での推論のサービングの両方に同じコードを使用します。
TensorFlow Transform は、トレーニングデータセットのフルパスを必要とする特徴の作成など、TensorFlow の入力データを前処理するためのライブラリです。たとえば、TensorFlow Transform を使用すると、次のことができます。
平均と標準偏差を使用して入力値を正規化する
すべての入力値に対して語彙を生成することにより、文字列を整数に変換する
観測されたデータ分布に基づいて、浮動小数点数をバケットに割り当てることにより、浮動小数点数を整数に変換する
TensorFlow には、単一のサンプルまたはサンプルのバッチに対する操作のサポートが組み込まれています。tf.Transformは、これらの機能を拡張して、トレーニングデータセット全体のフルパスをサポートします。
The output of tf.Transform is exported as a TensorFlow graph which you can use for both training and serving. Using the same graph for both training and serving can prevent skew, since the same transformations are applied in both stages.
Pip のアップグレード
ローカルで実行する場合にシステム Pip をアップグレードしないようにするには、Colab で実行していることを確認してください。もちろん、ローカルシステムは個別にアップグレードできます。
TensorFlow Transform のインストール
インポート
データ: ダミーデータを作成する
簡単な例として、いくつかの簡単なダミーデータを作成します。
raw_dataは前処理する最初の生データですraw_data_metadataにはraw_dataの各列の型を示すスキーマが含まれています。この例では非常に簡単です。
変換:前処理関数を作成する
前処理関数は、tf.Transform の最も重要な概念です。前処理関数では、データセットの変換が実際に行われます。テンソルのディクショナリーを受け入れて返します。ここで、テンソルは Tensor または SparseTensor を意味します。通常、前処理関数の中心となる API 呼び出しには 2 つの主要なグループがあります。
TensorFlow 演算子: テンソルを受け入れて返す関数。通常は TensorFlow 演算子を意味します。これらは、生データを一度に 1 つの特徴ベクトルで変換されたデータに変換するグラフに TensorFlow 演算子を追加します。これらは、トレーニングとサービングの両方で、すべてのサンプルで実行されます。
Tensorflow Transform アナライザー/マッパー: tf.Transform によって提供されるアナライザー/マッパーのいずれか。これらもテンソルを受け入れて返し、通常は Tensorflow 演算子と Beam 計算の組み合わせを含みますが、TensorFlow 演算子とは異なり、分析中はビームパイプラインでのみ実行され、トレーニングデータセット全体を通じた処理が必要になります。Beam 計算は(トレーニング前、分析中に)1 回だけ実行され、通常はトレーニングデータセット全体を処理します。
tf.constantテンソルが作成され、グラフに追加されます。たとえば、tft.minは、トレーニングデータセットのテンソルの最小値を計算します。
注意: 前処理関数をサービング推論に適用する場合、トレーニング中にアナライザーにより作成された定数は変更されません。データに傾向または季節性の要素がある場合は、それに応じて計画します。
Note: The preprocessing_fn is not directly callable. This means that calling preprocessing_fn(raw_data) will not work. Instead, it must be passed to the Transform Beam API as shown in the following cells.
構文
これで、すべてをまとめて Apache Beam を使用して実行する準備がほぼ整いました。
Apache Beam は、特別な構文を使用して変換を定義および呼び出します。たとえば、次の行をご覧ください。
メソッド to_this_call が呼び出され、pass_this というオブジェクトが渡されます。この演算は、スタックトレースで name this step と呼ばれます。to_this_call の呼び出しの結果は、result に返されます。 頻繁にパイプラインのステージは次のようにチェーンされます。
そして、新しいパイプラインで始まったので、以下のように続行します。
すべてを提供する
これで、データを変換する準備が整いました。ダイレクトランナーで Apache Beam を使用し、次の 3 つの入力を提供します。
raw_data- 上で作成した生の入力データraw_data_metadata- 生データのスキーマpreprocessing_fn- 変換を行うために作成した関数
答えは正しいでしょうか?
以前は、これを行うために tf.Transform を使用しました。
x_centered -
[1, 2, 3]の入力では、x の平均は 2 であり、x からその平均を引いて x 値を 0 に設定します。この場合、正しい結果は[-1.0, 0.0, 1.0]になります。y_normalized - y 値を 0 から 1 の間でスケーリングしています。入力は
[1, 2, 3]であったため、正しい結果は[0.0, 0.5, 1.0]になります。s_integerized - 文字列を語彙のインデックスにマップしています。語彙には 2 つの単語(「hello」と「world」)しかありませんでした。したがって、
["hello", "world", "hello"]を入力する場合、正しい結果は[0, 1, 0]になります。このデータでは「hello」が最も頻繁に発生するため、「hello」が語彙の最初のエントリになります。x_centered_times_y_normalized - 乗算を使用して
x_centeredとy_normalizedを掛け合わせることにより、新しい機能を作成しています。これにより、元の値ではなく結果が乗算され、[-0.0, 0.0, 1.0]の新しい結果が正しいことに注意してください。
結果の transform_fn を使用する
transform_fn/ ディレクトリには、グラフに組み込まれたすべての定数 tensorflow-transform の分析結果を実装する tf.saved_model が含まれています。
これを tf.saved_model.load で直接ロードすることは可能ですが、これは簡単ではありません。
より良いアプローチは、tft.TFTransformOutput を使用してロードすることです。 TFTransformOutput.transform_features_layer メソッドは、変換を適用するために使用できる tft.TransformFeaturesLayer オブジェクトを返します。
この tft.TransformFeaturesLayer は、バッチ機能のディクショナリを想定しています。したがって、raw_data に List[Dict[str, Any]] から Dict[str, tf.Tensor] を作成します。
tft.TransformFeaturesLayer は単独で使用できます。
エクスポート
より一般的なユースケースでは、tf.Transform を使用してトレーニングおよび評価データセットに変換を適用します(例については、次のチュートリアルを参照してください)。次に、トレーニング後、モデルをエクスポートする前に、tft.TransformFeaturesLayer を最初のレイヤーとして添付して、tf.saved_model の一部としてエクスポートできるようにします。以下で、具体的な例を説明します。
トレーニングモデルの例
以下は次のようなモデルです。
変換済みのバッチを取り込み、
すべてを一緒にまとめて、シンプルな
(batch, features)行列にし、いくつかの Dense レイヤーで実行し、そして
10 個の線形出力を生成する。
実際のユースケースでは、s_integerized 機能に one-hot を適用します。
このモデルは、tf.Transform によって変換されたデータセットでトレーニングできます。
モデルをトレーニングしたと想像してください。
このモデルは、変換された入力で実行されます
エクスポートラッパーの例
上記のモデルをトレーニングし、それをエクスポートしたいとします。
エクスポートされたモデルに変換関数を含める必要があります。
この結合されたモデルは生データで機能し、トレーニングされたモデルを直接呼び出すのとまったく同じ結果を生成します。
この export_model には tft.TransformFeaturesLayer が含まれており、完全に自己完結型です。保存して別の環境に復元しても、まったく同じ結果が得られます。
TensorFlow.org で表示
Google Colabで実行
GitHubでソースを表示
ノートブックをダウンロード