テンソルフローの時系列にLSTMを使用することについて私が見たガイドはたくさんありますが、データの読み取りと処理に関する現在のベストプラクティス、特にtf.data.Dataset
APIを使用することになっている場合はまだわかりません。
私の状況では、features
を含むファイルdata.csv
があり、次の2つのタスクを実行したいと思います。
ターゲットの計算-時間t
のターゲットは、ある期間におけるある列の変化率です。つまり、
labels[i] = features[i + h, -1] / features[i, -1] - 1
ここではh
をパラメーターにして、さまざまな範囲で実験できるようにしたいと思います。
ローリングウィンドウを取得する-トレーニングの目的で、機能を長さwindow
のウィンドウにロールする必要があります。
train_features[i] = features[i: i + window]
私はpandas
またはnumpy
を使用してこれらのオブジェクトを構築することに完全に満足しているので、これを一般的に実現する方法を尋ねていません-私の質問は、具体的には、そのようなパイプラインがtensorflow
でどのように見えるべきかです。
編集:私がリストした2つのタスクがデータセットAPIに適しているかどうか、または他のライブラリを使用してそれらを処理する方が良いかどうかも知りたいと思いますか?
まず、データセット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ファイル、チェックアウトなどのテキストデータでうまく機能します データセットチュートリアルのこのセクション 。