检查目标时出错:预期 conv2d 具有 4 个维度,但得到的数组具有形状
Error when checking target: expected conv2d to have 4 dimensions, but got array with shape
我构建了一个 Keras ConvLSTM 神经网络,我想根据一系列 10 次步骤提前预测一帧:
model = Sequential()
model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3),
input_shape=(None, img_size, img_size, Channels),
padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3),
padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3),
padding='same', return_sequences=False))
model.add(BatchNormalization())
model.add(Conv2D(filters=1, kernel_size=(3, 3),
activation='sigmoid',
padding='same', data_format='channels_last', name='conv2d'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')
培训:
data_train_x:(10, 10, 62, 62, 12)
data_train_y:(10, 1, 62, 62, 1)
model.fit(data_train_x, data_train_y, batch_size=10, epochs=1,
validation_split=0.05)
但我收到以下错误:
ValueError: Error when checking target: expected conv2d to have 4 dimensions, but got array with shape (10, 1, 62, 62, 1)
这是 'model.summary()' 的结果:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv_lst_m2d_4 (ConvLSTM2D) (None, None, 62, 62, 128) 645632
_________________________________________________________________
batch_normalization_3 (Batch (None, None, 62, 62, 128) 512
_________________________________________________________________
conv_lst_m2d_5 (ConvLSTM2D) (None, None, 62, 62, 64) 442624
_________________________________________________________________
batch_normalization_4 (Batch (None, None, 62, 62, 64) 256
_________________________________________________________________
conv_lst_m2d_6 (ConvLSTM2D) (None, 62, 62, 64) 295168
_________________________________________________________________
batch_normalization_5 (Batch (None, 62, 62, 64) 256
_________________________________________________________________
conv2d (Conv2D) (None, 62, 62, 1) 577
=================================================================
Total params: 1,385,025
Trainable params: 1,384,513
Non-trainable params: 512
_________________________________________________________________
这个模型是另一个模型的修改版,编译无误,与之前的模型相比,只是最后两层发生了变化。以前是这样的:
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3),
padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(Conv3D(filters=1, kernel_size=(3, 3, 3),
activation='sigmoid',
padding='same', data_format='channels_last', name='conv3d'))
我进行此更改是因为我想获得表单的 4 维输出(示例、output_row、output_col、过滤器)
错误信息很清楚。该模型期望输出等级为四,但您传递的是等级 5 的输出。在将 data_train_y 的第二个维度提供给模型之前挤压它。
data_train_y = tf.squeeze(data_train_y, axis=1)
我构建了一个 Keras ConvLSTM 神经网络,我想根据一系列 10 次步骤提前预测一帧:
model = Sequential()
model.add(ConvLSTM2D(filters=128, kernel_size=(3, 3),
input_shape=(None, img_size, img_size, Channels),
padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3),
padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3),
padding='same', return_sequences=False))
model.add(BatchNormalization())
model.add(Conv2D(filters=1, kernel_size=(3, 3),
activation='sigmoid',
padding='same', data_format='channels_last', name='conv2d'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')
培训:
data_train_x:(10, 10, 62, 62, 12)
data_train_y:(10, 1, 62, 62, 1)
model.fit(data_train_x, data_train_y, batch_size=10, epochs=1,
validation_split=0.05)
但我收到以下错误:
ValueError: Error when checking target: expected conv2d to have 4 dimensions, but got array with shape (10, 1, 62, 62, 1)
这是 'model.summary()' 的结果:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv_lst_m2d_4 (ConvLSTM2D) (None, None, 62, 62, 128) 645632
_________________________________________________________________
batch_normalization_3 (Batch (None, None, 62, 62, 128) 512
_________________________________________________________________
conv_lst_m2d_5 (ConvLSTM2D) (None, None, 62, 62, 64) 442624
_________________________________________________________________
batch_normalization_4 (Batch (None, None, 62, 62, 64) 256
_________________________________________________________________
conv_lst_m2d_6 (ConvLSTM2D) (None, 62, 62, 64) 295168
_________________________________________________________________
batch_normalization_5 (Batch (None, 62, 62, 64) 256
_________________________________________________________________
conv2d (Conv2D) (None, 62, 62, 1) 577
=================================================================
Total params: 1,385,025
Trainable params: 1,384,513
Non-trainable params: 512
_________________________________________________________________
这个模型是另一个模型的修改版,编译无误,与之前的模型相比,只是最后两层发生了变化。以前是这样的:
model.add(ConvLSTM2D(filters=64, kernel_size=(3, 3),
padding='same', return_sequences=True))
model.add(BatchNormalization())
model.add(Conv3D(filters=1, kernel_size=(3, 3, 3),
activation='sigmoid',
padding='same', data_format='channels_last', name='conv3d'))
我进行此更改是因为我想获得表单的 4 维输出(示例、output_row、output_col、过滤器)
错误信息很清楚。该模型期望输出等级为四,但您传递的是等级 5 的输出。在将 data_train_y 的第二个维度提供给模型之前挤压它。
data_train_y = tf.squeeze(data_train_y, axis=1)