我正在尝试将图像序列分为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文档,尤其是有关LSTM和ConvLSTM2D层的文档。了解这些层如何有效利用它们也很重要。
添加回答
举报
0/150
提交
取消