为了账号安全,请及时绑定邮箱和手机立即绑定

Keras 中 LSTM 层的 4D 输入

Keras 中 LSTM 层的 4D 输入

翻翻过去那场雪 2021-07-15 17:11:44
我有形状为(10000, 20, 15, 4)where num samples = 10000, num series in time = 20, height = 15, 的数据weight = 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 层?
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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


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


# ...

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

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


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

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


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


查看完整回答
反对 回复 2021-07-27
  • 1 回答
  • 0 关注
  • 305 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号