Keras 的 LSTM 层中的 4D 输入

Posted

技术标签:

【中文标题】Keras 的 LSTM 层中的 4D 输入【英文标题】:4D input in LSTM layer in Keras 【发布时间】:2019-03-26 22:18:01 【问题描述】:

我的数据形状为(10000, 20, 15, 4),其中num samples = 10000num series in time = 20height = 15weight = 4。所以我有表15x4,它随着时间的推移而分布。这是我想用这些数据训练它的模型:

...
model.add((LSTM(nums-1,return_sequences=True,input_shape=(20,15,4), activation='relu')))
model.add((LSTM(nums-1,return_sequences=False,input_shape=(20,15,4), activation='tanh')))
model.add(Dense(15,activation='relu'))
...

但是,我收到以下错误:

ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, 
found ndim=4

如何定义具有 4D 输入形状的 LSTM 层?

【问题讨论】:

***.com/a/61588937/10375049 【参考方案1】:

LSTM 层接受一个形状为(n_sample, n_timesteps, n_features) 的 3D 数组作为输入。由于数据中每个时间步长的特征是一个(15,4) 数组,因此您需要先将它们展平为长度为 60 的特征向量,然后将其传递给您的模型:

X_train = X_train.reshape(10000, 20, -1)

# ...
model.add(LSTM(...,input_shape=(20,15*4), ...)) # modify input_shape accordingly

或者,您可以使用包裹在TimeDistributed 层中的Flatten作为模型的第一层来展平每个时间步:

model.add(TimeDistributed(Flatten(input_shape=(15,4))))

此外,请注意,如果每个时间步长(即数组(15, 4))是一个特征图,其元素之间存在局部空间关系,例如图像补丁,您也可以使用ConvLSTM2D 而不是LSTM层。否则,展平时间步长并使用 LSTM 就可以了。


附带说明:您只需在模型的第一层指定input_shape 参数。在其他层上指定它是多余的,并且会被忽略,因为它们的输入形状是由 Keras 自动推断的。

【讨论】:

请看这里***.com/questions/61588153/…这是一个类似的问题

以上是关于Keras 的 LSTM 层中的 4D 输入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Keras 实现深度双向 LSTM?

在 Keras 中,当我创建具有 N 个“单元”的有状态“LSTM”层时,我到底在配置啥?

在 Keras 自定义层中连接多个形状为 (None, m) 的 LSTM 输出

Keras 中的 LSTM 序列预测只输出输入的最后一步

如何为 keras 中的 LSTM 回归准备输入数据?

Keras中的LSTM