python - Tensorflow 动态循环神经网络 (LSTM) : how to format input?

标签 python tensorflow lstm recurrent-neural-network tflearn

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

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

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

  • 循环神经网络:因为第二天依赖于前一天
  • lstm:因为模型每天都在构建
  • 动态:因为并非所有功能每天都会出现

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

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

我看过this使用 tflearn 的示例,但我不理解它的输入格式,因此我可以将其“镜像”到我的。同样,找到了this发布一个非常相似的问题,但似乎张贴者所拥有的样本彼此之间并不相关,因为它们在我的样本中。我对 tensorflow 的体验仅限于它的 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例如。

关于python - Tensorflow 动态循环神经网络 (LSTM) : how to format input?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341374/

相关文章:

python - Numpy 最快的 3D 到 2D 投影

python - python中随机选择

python - 这两个合并排序实现的空间复杂度是否相同?

python - Tensorflow Adam 优化器

javascript - 如何使用 Brain.js 查找模式

python - 在 cx 卡住中制作 msi - reportlab 中的模块

machine-learning - 降低图像检索任务模型全连接层的维数

python - 我如何使用 Keras 获得可重现的结果?

python - keras lstm 区别无状态和有状态

keras - 如何设置 Keras LSTM 进行时间序列预测?