【问题标题】:RNN and CNN on activity recognition in TensorflowRNN 和 CNN 关于 Tensorflow 中的活动识别
【发布时间】:2017-11-20 07:06:06
【问题描述】:

我有一个使用 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 层。但我不知道如何实现这一点。特别是当我已经在扁平输出中时。我将如何对其进行分段并将其提供给循环层?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果您仍想在卷积之上应用 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是同一个网络,所以必须共享filters参数)。然后你有 [h0,h1,h2] 这是一个时间序列(即使输入的粒度不同),你可以将它应用到 LSTM。
    • 这里是窗户
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2018-01-13
    • 2018-02-21
    相关资源
    最近更新 更多