【问题标题】:How to feed into LSTM with 4 dimensional input?如何使用 4 维输入输入 LSTM?
【发布时间】:2018-05-04 17:57:07
【问题描述】:

我有一个这种形状的序列输入:(6000, 64, 100, 50)

6000 只是样本序列的数量。每个序列的长度为64

我计划使用 Keras 将此输入拟合到 LSTM 中。

我这样设置我的输入:

input = Input(shape=(64, 100, 50))

这给了我(?, 64, 100, 50)的输入形状

但是,当我像这样将input 放入我的 LSTM 时:

x = LSTM(256, return_sequences=True)(input)

我收到此错误:

输入 0 与层 lstm_37 不兼容:预期 ndim=3,找到 ndim=4

如果我的输入形状类似于(?, 64, 100),这会起作用,但当我有第四维时就不行。

这是否意味着 LSTM 只能接受 3 维的输入?如何使用 Keras 将 4 维甚至更高维的输入输入 LSTM?

【问题讨论】:

    标签: python tensorflow machine-learning keras lstm


    【解决方案1】:

    答案是你不能。

    Keras 文档为循环层提供了以下信息:

    输入形状

    形状为(batch_size, timesteps, input_dim)的3D张量。

    在您的情况下,您有 64 个时间步,其中每个步的形状为 (100, 50)。让模型工作的最简单方法是将数据重塑为 (100*50)。

    Numpy 提供了一个简单的函数来做到这一点:

    X = numpy.zeros((6000, 64, 100, 50), dtype=numpy.uint8)
    X = numpy.reshape(X, (6000, 64, 100*50))
    

    这是否合理取决于您的数据。

    【讨论】:

      【解决方案2】:

      你也可以考虑 TimeDistributed(LSTM(...))

      inp = Input(shape=(64, 100, 50))
      x = TimeDistributed(LSTM(256, return_sequences=True))(inp)
      
      model = Model(inp, x)
      model.compile('adam', 'mse')
      model.summary()
      

      【讨论】:

        猜你喜欢
        • 2017-07-25
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多