web-dev-qa-db-ja.com

tensorflowデータセットAPIとpandasまたはnumpy)を使用する場合

テンソルフローの時系列にLSTMを使用することについて私が見たガイドはたくさんありますが、データの読み取りと処理に関する現在のベストプラクティス、特にtf.data.DatasetAPIを使用することになっている場合はまだわかりません。

私の状況では、featuresを含むファイルdata.csvがあり、次の2つのタスクを実行したいと思います。

  1. ターゲットの計算-時間tのターゲットは、ある期間におけるある列の変化率です。つまり、

    labels[i] = features[i + h, -1] / features[i, -1] - 1
    

    ここではhをパラメーターにして、さまざまな範囲で実験できるようにしたいと思います。

  2. ローリングウィンドウを取得する-トレーニングの目的で、機能を長さwindowのウィンドウにロールする必要があります。

    train_features[i] = features[i: i + window]
    

私はpandasまたはnumpyを使用してこれらのオブジェクトを構築することに完全に満足しているので、これを一般的に実現する方法を尋ねていません-私の質問は、具体的には、そのようなパイプラインがtensorflowでどのように見えるべきかです。

編集:私がリストした2つのタスクがデータセットAPIに適しているかどうか、または他のライブラリを使用してそれらを処理する方が良いかどうかも知りたいと思いますか?

11
ira

まず、データセットAPIwithpandasまたは )で説明されているnumpy配列を使用できることに注意してくださいチュートリアル

すべての入力データがメモリに収まる場合、それらからDatasetを作成する最も簡単な方法は、それらを_tf.Tensor_オブジェクトに変換し、Dataset.from_tensor_slices()を使用することです。

さらに興味深い質問は、データパイプラインをセッション_feed_dict_で編成するか、Datasetメソッドで編成するかです。コメントですでに述べたように、データはクライアントをバイパスしてデバイスに直接流れるため、データセットAPIの方が効率的です。差出人 "パフォーマンスガイド"

_feed_dict_を使用してデータをフィードすると、高レベルの柔軟性が得られますが、ほとんどの場合、_feed_dict_を使用すると最適にスケーリングされません。ただし、単一のGPUのみが使用されている場合、その違いはごくわずかです。 DatasetAPIを使用することを強くお勧めします。次のことは避けてください。

_# feed_dict often results in suboptimal performance when using large inputs  
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
_

しかし、彼らが言うように、違いmayはごくわずかであり、GPUは通常の_feed_dict_入力で完全に利用できます。トレーニング速度が重要でない場合は、違いはありません。快適なパイプラインを使用してください。速度が重要で、トレーニングセットが大きい場合、特に分散計算を計画している場合は、DatasetAPIの方が適しているようです。

Dataset APIは、CSVファイル、チェックアウトなどのテキストデータでうまく機能します データセットチュートリアルのこのセクション

9
Maxim