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
目标 是预测第二天该人的标签,因此第 N+1 天的标签,无论是基于每个人,还是总体(每-人对我来说更有意义)。我可以自由地重新格式化数据(它并不大)。基于以上阅读后,我认为动态 RNN (LSTM) 最有效:
- 递归神经网络:因为第二天依赖前一天
- 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。
我得到了一些这种格式的数据和以下详细信息:
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:因为模型每天都在建立
- 动态:因为并非所有功能每天都存在
如果对我的数据没有意义,请在这里打断我。 那么问题是:
如何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
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))
然后像
一样将其送入 rnnoutputs, state = tf.nn.dynamic_rnn(cell, x)
意味着您的输入数据应该具有 (batch_size, seq_length, N)
的形状。如果一批中的示例长度不同,您应该用 0 向量将它们填充到最大长度并将适当的 sequence_length
参数传递给 dynamic_rnn
显然我跳过了很多细节,所以要完全理解 RNN,您可能应该阅读许多优秀的 RNN 教程之一,例如 this one。