1

私はTensorflowを使用して自分のデータセットでニューラルネットワーク予測を行っています。私が最初にしたのは、コンピュータの小さなデータセットで動作するモデルでした。その後、コードを少し変更して、大規模なデータセットでGoogle Cloud ML-Engineを使用して、列車と予測をML-Engineで実現しました。テンソルフローを使ったデータ正規化

パンダデータフレームの機能を標準化していますが、スキューが発生し、予測結果が悪くなります。

私が本当に好きなのは、ライブラリtf-transformを使ってグラフのデータを正規化することです。これを行うには、関数preprocessing_fnを作成し、 'tft.scale_to_0_1'を使用したいと思います。 https://github.com/tensorflow/transform/blob/master/getting_started.md

私が見つけた主な問題は、予測をしようとしているときです。私はインターネットを探していますが、トレーニングでデータが正規化されている輸出モデルの例は見つかりません。私が見つけたすべての例では、データはどこでも正規化されていません。

私が知りたいと思っているのはトレーニングでデータを正規化し、予測を行うために新しいデータで新しいインスタンスを送信すると、このデータはどのように正規化されますか?

≠Tensorflowデータパイプラインにある可能性がありますか?正規化を行うための変数はいくつかの場所に保存されていますか?

要約:モデルの入力を正規化し、新しいインスタンスも標準化する方法を探しています。

答えて

4

まず、このためにtf.transformは必要ありません。あなたがする必要があるのは、training/eval input_fnとあなたの提供input_fnの両方から呼び出す関数を書くことだけです。あなたはadd_engineeredへの呼び出しで返す機能をラップし、あなたのinput_fnで、

``` 
def add_engineered(features): 
    min_x = 22 
    max_x = 43 
    features['x'] = (features['x'] - min_x)/(max_x - min_x) 
    return features 
``` 

そして、最小値と最大値を把握するためにあなたの全体のデータセットでパンダを使用していたと仮定して例えば

、:

``` 
def input_fn(): 
    features = ... 
    label = ... 
    return add_engineered(features), label 
``` 

とあなたのserving_inputは、fnで、同様add_engineeredへの呼び出しで返された機能(NOT feature_placeholders)をラップするようにしてください:

``` 
def serving_input_fn(): 
    feature_placeholders = ... 
    features = ... 
    return tflearn.utils.input_fn_utils.InputFnOps(
     add_engineered(features), 
     None, 
     feature_placeholders 
    ) 
``` 

予測時のJSON入力には、スケーリングされていない元の値が含まれている必要があります。

このアプローチの完全な実例があります。

https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/courses/machine_learning/feateng/taxifare/trainer/model.py#L107

tf.transformは、2段階のプロセスを提供:MIN、MAXおよびグラフ・変更ステップを計算する解析ステップは、あなたのTensorFlowグラフにあなたのためのスケーリングを挿入します。したがって、tf.transformを使用するには、最初にデータフローパイプラインを記述し、分析を行い、次にTensorFlowコード内のtf.scale_0_to_1への呼び出しをプラグインする必要があります。ここでこれを実行する例を示します

https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/criteo_tft

add_engineered()アプローチは単純であると私は示唆しているものです。 tf。時間の経過とともにデータの分布が変化し、パイプライン全体を自動化したい場合(例:継続的なトレーニングの場合)、変換アプローチが必要です。

+0

非常に遅れて申し訳ありませんが、add_engineered()アプローチは完全に機能しました。 – Marc

関連する問題