我有一个使用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层。但我不知道如何实现这一点。特别是当我已经处于扁平化输出时。如何对其进行分段并将其提供给循环图层?
答案 0 :(得分:2)
LSTM是与序列数据一起使用的架构。在时间维度上使用卷积会使您失去这个时间维度,使得LSTM的使用意义不大。
我个人所做的是用LSTM替换CNN层,因为两者都用于在时间维度上进行一些证据聚合。在这种情况下,我认为您的问题的答案很明确:n_steps
是数据的时间步长。
如果您仍想在卷积上应用LSTM,那么您应该设计某种更高级别的序列。一种可能性是向卷积层提供不同的窗口,然后使用它们的输出作为LSTM的输入序列。显然这只是一个"技巧"你应该找到这样做的好动机。