【问题标题】:Error when checking target: expected conv2d to have 4 dimensions, but got array with shape检查目标时出错:预期 conv2d 有 4 个维度,但得到了具有形状的数组
【发布时间】:2018-11-30 06:04:33
【问题描述】:

我已经构建了一个 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 维输出(样本、输出行、输出列、过滤器)

【问题讨论】:

    标签: python-3.x tensorflow keras conv-neural-network recurrent-neural-network


    【解决方案1】:

    错误信息很清楚。模型期望输出等级为 4,但您传递的输出等级为 5。在将 data_train_y 的第二个维度输入模型之前,先压缩它。

    data_train_y = tf.squeeze(data_train_y, axis=1)
    

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2019-07-31
      • 2019-11-13
      • 2020-07-02
      • 2019-03-02
      • 2020-02-07
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多