RNN和CNN关于Tensorflow中的活动识别

时间:2017-06-17 17:11:57

标签: tensorflow conv-neural-network lstm recurrent-neural-network

我有一个使用3个传感器进行活动识别的CNN。我堆叠了传感器的尺寸,给了我9个通道,并将时间序列数据分成每个窗口200个样本。我将其送入2个CNN层,1个完全连接层和1个softmax层。全部在Tensorflow

现在我想用LSTM层替换完全连接的层。但我不知道如何实现它。如果我从上一个卷积层得到平坦的输出,我该如何将它输入LSTM层?我如何申请辍学?

因为我在LSTM上看到了活动识别的Github代码,输入是

x = tf.placeholder(tf.float32, [None, n_steps, n_input])
y = tf.placeholder(tf.float32, [None, n_classes])

但我最后一层的扁平输出只有2d(-1,N)。 n_steps是时间步数对吗?我应该重塑我扁平的输出吗?我应该如何重塑它?我相信来自Github的LSTM代码中的n_steps指的是每个窗口的样本数。那么我应该将平展输出再次分成每个窗口200个样本吗?

编辑: 我想要做的是将时间序列数据划分为切片或时间窗口,然后应用卷积层,然后将其展平并输入到LSTM层。但我不知道如何实现这一点。特别是当我已经处于扁平化输出时。如何对其进行分段并将其提供给循环图层?

1 个答案:

答案 0 :(得分:2)

LSTM是与序列数据一起使用的架构。在时间维度上使用卷积会使您失去这个时间维度,使得LSTM的使用意义不大。

我个人所做的是用LSTM替换CNN层,因为两者都用于在时间维度上进行一些证据聚合。在这种情况下,我认为您的问题的答案很明确:n_steps是数据的时间步长。

如果您仍想在卷积上应用LSTM,那么您应该设计某种更高级别的序列。一种可能性是向卷积层提供不同的窗口,然后使用它们的输出作为LSTM的输入序列。显然这只是一个"技巧"你应该找到这样做的好动机。