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

2024-05-20 20:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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提供/格式化此数据?

我已经看过使用tflearn的this示例,但是我不理解它的输入格式,因此我可以将它“镜像”到我的。同样地,在一个非常相似的问题上找到了this帖子,但是看起来海报上的样本彼此之间没有关联,就像它们在我的问题中一样。我对tensorflow的经验仅限于它的get started页。


Tags: 数据功能tensorflow格式动态标签labelperson1
1条回答
网友
1楼 · 发布于 2024-05-20 20:20:49

dynamic: because not all features are present each day

你对动态的概念是错误的。张量流中的动态RNN 意味着图形是在执行期间动态创建的,但输入的大小始终相同(0表示缺少功能应该可以正常工作)。

不管怎样,你得到的是不同长度的序列(第一天。。。一天?)特征向量(特征1。。。特性)。首先,你需要一个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是指输入序列长度。因为我们使用的是动态的,序列长度不需要在编译期间定义,所以您的输入占位符可以是:

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

然后输入rnn-like

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

这意味着您的输入数据应该具有(batch_size, seq_length, N)形状。如果一批中的示例具有不同的长度,则应使用0个向量将其填充到最大长度,并将适当的sequence_length参数传递给dynamic_rnn

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

相关问题 更多 >