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

8

我收到了以下格式的数据和详细信息:

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的标签,可以根据每个人或整体进行预测(我认为按人员进行预测更有意义)。我可以自由地重新格式化数据(它不是很大)。基于上述内容并经过一些阅读,我认为使用动态RNN(LSTM)可能效果最佳:

  • 递归神经网络:因为下一天依赖于前一天
  • LSTM:因为模型会随着每一天而建立起来
  • 动态:因为不是每天都有所有特征

如果对于我拥有的数据来说这种方法不合适,请在此处停止。问题是:

如何为tensorflow / tflearn提供/格式化这些数据?

我查看了此示例使用tflearn,但我不了解其输入格式,以便我可以将其“镜像”到我的格式。同样,我在帖子中发现了一个非常相似的问题,但似乎发布者的样本与我的样本不相关。我对tensorflow的经验仅限于其入门页面

1个回答

15

动态:因为每天不都有所有的特征

你对“动态”这个概念的理解是错误的。在Tensorflow中,“动态RNN”是指图在执行期间会被动态创建,但输入大小始终相同(缺少某个特征的情况下输入0也可以正常工作)。

无论如何,你现在拥有的是长度不同的序列(day1 ... day?),其中包含若干个特征向量(feature1 ... featureN)。首先,你需要一个LSTM cell

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

因此,您可以使用tf.nn.dynamic_rnn创建动态展开的RNN图。文档中指出:

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

显然,我省略了很多细节,因此要完全理解RNN,您可能应该阅读其中许多优秀的RNN教程之一,例如这个


当输入数据的长度是任意的时,如何构建一个RNN? - GoingMyWay
1
如果你所说的“输入数据长度”是指批次大小,那么你可以将x声明为shape=(None, None, N),以便能够传递任意长度的批次。如果你指的是序列长度,那么我的回答已经涵盖了这一点。 - Dzjkb
1
谢谢,但是我不认为在我的应用程序中可以使用0向量填充输入数据到最大长度。因为在每个时间步骤中,都有不同长度的输入数据。在我看来,如果使用0向量进行填充,网络可能会表现不佳,因为0具有其自身的含义,例如位置或标签(one-hot编码)。 - GoingMyWay
1
如果您将 sequence_length 参数传递给 dynamic_rnn,则填充什么内容并不重要,因为 TensorFlow 知道它只是用于填充(因此不会影响结果)。使用 0 向量进行填充应该是可以的。更详细的解释请参见这里 - Dzjkb
谢谢,这是我的问题细节:https://stackoverflow.com/questions/44897258/how-can-process-arbitrary-length-input-with-rnn-in-tensorflow - GoingMyWay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接