web-dev-qa-db-ja.com

TensorflowダイナミックRNN(LSTM):入力をフォーマットする方法は?

この形式のデータと次の詳細が提供されました。

person1, day1, feature1, feature2, ..., featureN, label
person1, day2, feature1, feature2, ..., featureN, label
...
person1, dayN, feature1, feature2, ..., featureN, label
person2, day1, feature1, feature2, ..., featureN, label
person2, day2, feature1, feature2, ..., featureN, label
...
person2, dayN, feature1, feature2, ..., featureN, label
...
  • 常に同じ数の機能がありますが、各機能は0で何も表さない場合があります
  • 一人一人が利用できる日数はさまざまです。 person1には20日間のデータがあり、person2には50日間のデータがあります

目標は、翌日の人のラベルを予測することです。したがって、dayN + 1のラベルは、1人あたり、または全体として(一人当たりの方が私には理にかなっています)。データは自由に再フォーマットできます(大きくはありません)。上記に基づいて、いくつか読んだ後、動的RNN(LSTM)が最適に機能すると思いました。

  • リカレントニューラルネットワーク:翌日は前日に依存しているため
  • lstm:モデルは毎日構築されるため
  • 動的:すべての機能が毎日存在するわけではないため

私が持っているデータに意味がない場合は、ここで止めてください。問題は次のとおりです。

tensorflow/tflearn用にこのデータを提供/フォーマットする方法は?

Tflearnを使用した this の例を見てきましたが、入力形式がわからないため、「ミラーリング」してマイニングできます。同様に、 this 非常によく似た質問への投稿を見つけましたが、ポスターのサンプルは私のものであるため、相互に関連していないようです。私のテンソルフローの経験は、その はじめに ページに限定されています。

8
Dimebag

動的:すべての機能が毎日存在するわけではないため

ここでは、動的の概念が間違っています。 Tensorflowの動的RNNは、実行中にグラフが動的に作成されることを意味しますが、入力は常に同じサイズです(機能がないため、0で問題ありません)。

とにかく、ここで得られるのは、特徴ベクトル(feature1 ... featureN)のさまざまな長さ(day1 ... day?)のシーケンスです。まず、 LSTMセル が必要です

cell = tf.contrib.rnn.LSTMcell(size)

したがって、 tf.nn.dynamic_rnn を使用して、動的に展開されたrnnグラフを作成できます。ドキュメントから:

入力:RNN入力。

Time_major == False(デフォルト)の場合、これは形状のテンソル[batch_size、max_time、...]、またはそのような要素のネストされたタプルである必要があります。

ここで、max_timeは入力シーケンスの長さを示します。 dynamic_rnnを使用しているため、コンパイル時にシーケンスの長さを定義する必要はありません。したがって、入力プレースホルダーは次のようになります。

x = tf.placeholder(tf.float32, shape=(batch_size, None, N))

次に、次のようにrnnにフィードされます

outputs, state = tf.nn.dynamic_rnn(cell, x)

つまり、入力データの形状は(batch_size, seq_length, N)である必要があります。 1つのバッチの例の長さが異なる場合は、最大長まで0ベクトルでそれらを埋め、適切なsequence_lengthパラメーターをdynamic_rnnに渡す必要があります。

明らかに私は多くの詳細をスキップしたので、RNNを完全に理解するには、たとえば this one のような多くの優れたRNNチュートリアルの1つを読む必要があります。

15
Dzjkb