【问题标题】:How to properly set the input_shape of LSTM layers?如何正确设置 LSTM 层的 input_shape?
【发布时间】:2020-07-24 00:02:26
【问题描述】:

我有一个如下形状的输入数据:(5395, 69, 1)

我的 input_shape 应该是:

  • (69,1)

  • (1,69)?

在 LSTM 层中有 69 个神经元,我得到第一个 input_shape 19'596 个参数来训练,第二个 38'364个参数,不是分别作为输入1和69的值得到的结果吗?我的问题是我应该输入 1 因为我有 1 个特征,还是输入 69 因为我有 69 个时间步,为什么?

【问题讨论】:

    标签: keras lstm recurrent-neural-network


    【解决方案1】:

    LSTM 层的输入形状为(num_timesteps, num_features),因此:

    • 如果每个输入样本有 69 个时间步,其中每个时间步由 1 个特征值组成,那么输入形状将为 (69, 1)

    • 如果每个输入样本是 69 个特征值的单个时间步长,那么使用 RNN 层可能根本没有意义,因为基本上输入不是序列。相反,最好将输入样本展平(即将(1, 69) 重塑为(69,)),然后使用其他连接架构/层(例如Dense)。


    作为旁注,我可能是错的,但我有一种感觉,你在混合输入时间步的数量和 LSTM 层中的单元/神经元数量(具体来说,我指的是你的这句话:“ LSTM 层中有 69 个神经元……”)。这两个彼此无关,它们不一定是相同的数字。 LSTM 层中单元/神经元的数量决定了该层的表示能力,应根据实验/经验进行相应设置。如果您有兴趣,This answer 会进一步解释这一点。

    【讨论】:

    • 很好解释。由于您的旁注,我将 LSTM 层的神经元数量设置为时间步长,因为我正在研究一个简单的示例,我这样做是为了加快实验速度,明确这方面需要更多工作。
    • 现在由于您在链接中的评论“进一步,当单位数为3时,基本上意味着从每个输入时间步中只提取3个特征,即每个输入时间步将由3表示特征,这 3 个特征将被馈送到下一层”这是否意味着序列中的每个时间步将有 3 个特征,或者每个序列将有 3 个特征
    • @DavidDiaz 通过在 LSTM 层中有 3 个单元,每个时间步将由该 LSTM 层表示为 3 值向量;但是,您可以决定使用所有时间步的表示(即通过将return_sequences=True 参数传递给LSTM 层)或仅使用最后一个时间步表示(即return_sequences=False,这是默认情况)。
    • 如果我使用 LSTM 和 Dense 层作为结构传递给 LSTM return_sequences = T 我应该使用更平坦的层吗?为什么?
    • @DavidDiaz 这取决于您想要实现的目标(即应用程序和问题制定)。例如,如果您想预测每个时间步的某些内容(而不仅仅是对整个序列的单个预测),那么使用return_sequences=TrueDense 层是有意义的。正如我所说,根据场景,模型的架构可能会有所不同。
    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 2019-12-29
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多