繁体   English   中英

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
...
  • 总是有相同数量的功能,但每个功能可能是0表示什么都没有
  • 每个人都有不同的天数,例如,person1有20天的数据,person2有50天

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

  • 反复神经网络:因为第二天依赖于前一天
  • lstm:因为模型每天都会建立起来
  • 动态:因为并非每天都有所有功能

如果对我的数据没有意义,请在这里阻止我。 问题是:

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

我使用tflearn查看了这个例子,但是我不理解它的输入格式,所以我可以“镜像”它到我的。 同样地,在一个非常相似的问题上找到了这篇文章,但看起来海报所拥有的样本彼此之间没有相关性,因为它们在我的中。 我对tensorflow的体验仅限于其入门页面。

动态:因为并非每天都有所有功能

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

无论如何,你在这里得到的是特征向量(feature1 ... featureN)的不同长度(第1天......天?)的序列。 首先,您需要一个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) 如果一个批处理中的示例具有不同的长度,则应使用0向量填充它们到最大长度,并将适当的sequence_length参数传递给dynamic_rnn

显然我已经跳过很多细节,所以为了完全理解RNN,你应该阅读许多优秀的RNN教程之一,比如这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM