2017-11-10 15 views
4

私はTensorFlowのニューラルネットワークでいくつかの実験を行っています。最新バージョンのリリースノートでは、今後DataSetは入力データを提供するために推奨されるAPIです。DataSetは入力値の範囲を正規化します

一般に、外界から数値を取得するときは、値の範囲を正規化する必要があります。長さ、質量、速度、日付または時間のような生の数字を差し込むと、その結果生じる問題は悪条件になります。値のダイナミックレンジをチェックし、範囲(0,1)または(-1,1)に正規化する必要があります。

これはもちろん、生のPythonで行うことができます。しかし、DataSetは、多数のデータ変換機能を提供し、その結果コードを維持するのが簡単になるだけでなく、実行速度が向上するという理論上、その使用を奨励します。これは、正規化のための組み込み機能もなければならないことを示唆しています。

しかし、https://www.tensorflow.org/programmers_guide/datasetsのドキュメントを見ても、そのようなことは言及されていません。何か不足していますか?これを行うための推奨される方法は何ですか?

+0

データセット全体または各要素内で正規化しようとしていますか?各要素の内部は 'dataset.map'を使って簡単にできるはずですが、値が取ることができる最大値と最小値をあらかじめ知っていなければ、データセット全体で簡単に行うことはできません。 – Sunreef

+0

@Sunreefそうです、実際に発生するすべての値を調べる前にそれを行う方法を知る方法がないため、データセット全体に渡っていなければなりません。 – rwallace

+1

@nwallace Tensorflowの遅延読み込みでは、データセット全体を繰り返し処理し、最大値と最小値を抽出し、次にこの情報を2番目のステップで使用する前処理ステップを追加しない限り、すべての値にアクセスできるかどうかはわかりませんトレーニングのとき。しかし、通常のNumpyを使ってこれらの値を取得する方が良いでしょう。 – Sunreef

答えて

1

tensorflowデータセットの主なアイデアの私の理解では、データのtf.data.Datasetは、具体的にストリームに設計されているため非常に大量の、より正確テンソル、複雑な事前procesingが直接適用されないことを私に伝えます:Dataset

入力パイプラインを要素の集合(テンソルの入れ子構造) とその要素に作用する 変換の「論理計画」として表すことができます。

tf.data.Datasetテンソルで動作するという事実は、min又はmaxとして、データ上の任意の特定の統計情報を取得する、完全tf.Sessionを必要とし、全体のパイプラインを介して少なくとも一つ実行することを意味します。次のサンプル行:最初のバッチの準備が整うまで、datasetが責任を負う場合

iterator = dataset.make_one_shot_iterator() 
batch_x, batch_y = iterator.get_next() 

...次のバッチの高速を提供するように設計され、データセットの大きさの関係なく、世界を停止します前処理のために。そのため、「論理プラン」にはローカル変換のみが含まれているため、データをストリーミングできるだけでなく、変換を行うことができます。in parallel

tf.data.Datasetで正規化を実装することは不可能ではありません。そのように設計されていないように感じられます。その結果、見た目が醜いように見えますが(私はそれは絶対に確信できません) 。しかし、batch-normalizationがこの写真に完全に収まることに注意してください。それは私が見る「いい」オプションの1つです。もう一つのオプションはnumpyで単純な前処理を行い、その結果をtf.data.Dataset.from_tensor_slicesに送ります。これにより、パイプラインがはるかに複雑になるわけではありませんが、tf.data.Datasetの使用を制限するものではありません。

関連する問題