RNN和CNN在Tensorflow活动识别中的应用

RNN和CNN在Tensorflow活动识别中的应用,tensorflow,conv-neural-network,lstm,recurrent-neural-network,Tensorflow,Conv Neural Network,Lstm,Recurrent Neural Network,我有一个CNN,使用3个传感器进行活动识别。我对传感器的尺寸进行了叠加,得到了9个通道,并将时间序列数据划分为每个窗口200个样本。我把它喂给了两个CNN层,一个全连接层和一个softmax层。全向张量流 现在我想用LSTM层替换完全连接的层。但我不知道如何实现它。如果我有上一个卷积层的平坦输出,我如何将其馈送到LSTM层?我如何申请退学 因为我在LSTM上看到了一个Github代码,用于活动识别,输入是 x = tf.placeholder(tf.float32, [None, n_steps

我有一个CNN,使用3个传感器进行活动识别。我对传感器的尺寸进行了叠加,得到了9个通道,并将时间序列数据划分为每个窗口200个样本。我把它喂给了两个CNN层,一个全连接层和一个softmax层。全向张量流

现在我想用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_步数是时间步数,对吗?我应该重新调整平坦的输出吗?我应该如何重塑它?我相信Github的LSTM代码中的
n_步骤
指的是每个窗口的样本数。那么,我应该再次将展平的输出分割为每个窗口200个样本吗

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

LSTM是用于数据序列的体系结构。在时间维度上使用卷积会丢失此时间维度,从而降低LSTM的使用意义

我个人要做的是将CNN层替换为LSTM层,因为两者都用于在时间维度上对证据进行聚合。在这种情况下,我认为您的问题的答案很清楚:
n_步骤
是数据的时间步骤


如果您仍然希望在卷积上应用LSTM,那么您应该设计某种更高级别的序列。一种可能性是为卷积层提供不同的窗口,然后将其输出用作LSTM的输入序列。显然,这只是一个“把戏”,您应该找到这样做的良好动机。

LSTM是用于数据序列的体系结构。在时间维度上使用卷积会丢失此时间维度,从而降低LSTM的使用意义

我个人要做的是将CNN层替换为LSTM层,因为两者都用于在时间维度上对证据进行聚合。在这种情况下,我认为您的问题的答案很清楚:
n_步骤
是数据的时间步骤


如果您仍然希望在卷积上应用LSTM,那么您应该设计某种更高级别的序列。一种可能性是为卷积层提供不同的窗口,然后将其输出用作LSTM的输入序列。显然,这只是一个“把戏”,你应该找到这样做的好动机。

我想做的是将时间序列数据划分为切片或时间窗口,然后应用卷积层,然后将其展平并输入LSTM层。但我不知道如何实现这一点。特别是当我已经在平坦的输出。我将如何分割它并将其馈送到循环层?就像如果您直接使用LSTM,您将对这些时间窗口应用LSTM。然而,一旦我将CNN应用于时间窗口,我就会将其展平。问题是,我需要再次分段。就像我分割我原来的时间窗口一样?但是CNN已经做了maxpooling和其他操作,所以这是一个全新的数据。正如我在回答中所说的,你可以先为卷积层提供不同的窗口(比如w0,w1,w2),然后考虑它们的输出(o0,o1,o2)和lstm的输入。实际上,您需要使用具有共享参数的不同卷积网络。w0=[t0,t1,t2];w1=[t3,t4,t5]w2=[t6,t7,t8]然后在每个窗口的t上应用卷积。h0=convLayer(w0),h1=convLayer(w1),h2=convLayer(w2)(convLayer是同一个网络,因此您必须共享过滤器参数)。然后你有[h0,h1,h2]这是一个时间序列(即使输入的粒度不同),你可以将它应用到LSTM。这里是窗口。我想做的是将时间序列数据划分为片或时间窗口,然后应用卷积层,然后将其展平并输入到LSTM层。但我不知道如何实现这一点。特别是当我已经在平坦的输出。我将如何分割它并将其馈送到循环层?就像如果您直接使用LSTM,您将对这些时间窗口应用LSTM。然而,一旦我将CNN应用于时间窗口,我就会将其展平。问题是,我需要再次分段。就像我分割我原来的时间窗口一样?但是CNN已经做了maxpooling和其他操作,所以这是一个全新的数据。正如我在回答中所说的,你可以先为卷积层提供不同的窗口(比如w0,w1,w2),然后考虑它们的输出(o0,o1,o2)和lstm的输入。实际上,您需要使用具有共享参数的不同卷积网络。w0=[t0,t1,t2];w1=[t3,t4,t5]w2=[t6,t7,t8]然后在每个窗口的t上应用卷积。h0=convLayer(w0),h1=convLayer(w1),h2=convLayer(w2)(convLayer是同一个网络,因此您必须共享过滤器参数)。然后你有[h0,h1,h2]这是一个时间序列(即使输入的粒度不同),你可以将它应用到LSTM