Tensorflow 动态 RNN(LSTM):如何格式化输入?

Tensorflow dynamic RNN (LSTM): how to format input?

我得到了一些这种格式的数据和以下详细信息:

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
...

目标 是预测第二天该人的标签,因此第 N+1 天的标签,无论是基于每个人,还是总体(每-人对我来说更有意义)。我可以自由地重新格式化数据(它并不大)。基于以上阅读后,我认为动态 RNN (LSTM) 最有效:

如果对我的数据没有意义,请在这里打断我。 那么问题是:

如何give/format此数据tensorflow/tflearn?

我看过 this example using tflearn but I do not understand its input format so that I can 'mirror' it to mine. Similarly, have found post on a very similar question yet it seems like the samples the poster has are not related between each-other as they are in mine. My experience with tensorflow is limited to its get started 页面。

dynamic: because not all features are present each day

你对动态的概念有误。 Tensorflow 中的动态 RNN 表示图形是在执行期间动态创建的,但输入的大小始终相同(0,因为缺少某个功能应该可以正常工作)。

无论如何,您在这里得到的是特征向量 (feature1 ... featureN) 的不同长度(day1 ... day?)的序列。首先,你需要一个LSTM cell

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

因此您可以使用 tf.nn.dynamic_rnn 创建一个动态展开的 rnn 图。来自文档:

inputs: The RNN inputs.

If time_major == False (default), this must be a Tensor of shape: [batch_size, max_time, ...], or a nested tuple of such elements.

其中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) 的形状。如果一批中的示例长度不同,您应该用 0 向量将它们填充到最大长度并将适当的 sequence_length 参数传递给 dynamic_rnn

显然我跳过了很多细节,所以要完全理解 RNN,您可能应该阅读许多优秀的 RNN 教程之一,例如 this one