猿问

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

我正在尝试将图像序列分为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 frame

model.add(ConvLSTM2D(filters=10,

                     input_shape=input_shape,

                     kernel_size=(3, 3),

                     activation='relu',

                     data_format="channels_last"))

谁能帮我这个忙吗?


慕尼黑5688855
浏览 194回答 1
1回答

慕斯王

有几种方法可以指定输入形状。从文档中:将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层的文档。了解这些层如何有效利用它们也很重要。
随时随地看视频慕课网APP

相关分类

Python
我要回答