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

Keras ValueError:输入0与层conv_lst_m2d_16不兼容:

Keras ValueError:输入0与层conv_lst_m2d_16不兼容:

慕尼黑5688855 2021-04-25 12:56:00
我正在尝试将图像序列分为2类。每个序列有5帧。我已用作ConvLSTM2D第一层,但遇到了以上错误。该input_shape参数是input_shape = (timesteps, rows, columns, channels)。我生成的数据具有以下格式:self.data = np.random.random((self.number_of_samples,                                   self.timesteps,                                  self.rows,                                  self.columns,                                  self.channels)) 第一层的实现如下所示:model = Sequential()# time distributed is used - working frame by framemodel.add(ConvLSTM2D(filters=10,                     input_shape=input_shape,                     kernel_size=(3, 3),                     activation='relu',                     data_format="channels_last"))谁能帮我这个忙吗?
查看完整描述

1 回答

?
慕斯王

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

有几种方法可以指定输入形状。从文档中:

input_shape参数传递给第一层。这是一个形状元组(整数或None条目的元组,其中None表示可能期望任何正整数)。在中input_shape不包括批次尺寸

因此,正确的输入形状为:

input_shape = (timesteps, rows, columns, channels)

修复这个错误后,您会遇到下一个错误(这是相关的input_shape):

ValueError:输入0与层conv_lst_m2d_2不兼容:预期ndim = 5,找到的ndim = 4

当您尝试添加第二ConvLSTM2D层时,会发生此错误。发生这种情况是因为第一ConvLSTM2D层的输出是具有shape的4D张量(samples, output_row, output_col, filters)。您可能需要设置return_sequences=True,在这种情况下,输出是具有形状的5D张量(samples, time, output_row, output_col, filters)

修复此错误之后,您将在以下几行中遇到一个新错误:

model.add(Flatten())
model.add(LSTM(10))

Flatten层之前紧接LSTM一层是没有意义的。这将永远无法使用,因为LSTM需要具有shape的3D输入张量(samples, time, input_dim)

总而言之,我强烈建议您仔细阅读Keras文档,尤其是有关LSTMConvLSTM2D层的文档。了解这些层如何有效利用它们也很重要。


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信