3

我试图将具有以下形状的数据拟合到预训练的 keras vgg19 模型中。

图像输入形状是(32383, 96, 96, 3) 标签形状(32383, 17) ,我得到了这个错误

expected block5_pool to have 4 dimensions, but got array with shape (32383, 17)

在这条线上

model.fit(x = X_train, y= Y_train, validation_data=(X_valid, Y_valid),
              batch_size=64,verbose=2, epochs=epochs,callbacks=callbacks,shuffle=True)

这是我定义模型的方式

model = VGG16(include_top=False, weights='imagenet', input_tensor=None, input_shape=(96,96,3),classes=17)

maxpool 如何给我一个 2d 张量而不是 4D 张量?我正在使用来自 keras.applications.vgg16 的原始模型。我该如何解决这个错误?

4

1 回答 1

3

您的问题来自VGG16(include_top=False,...)因为这使您的解决方案仅加载 VGG 的卷积部分。这就是为什么Keras抱怨它得到 4 维输出的 2 维输出(4 维来自卷积输出具有 shape 的事实(nb_of_examples, width, height, channels))。为了克服这个问题,您需要设置include_top=True或添加额外的层来压缩卷积部分 - 到2d一个(例如使用Flatten,GlobalMaxPooling2DGlobalAveragePooling2D一组Dense层 - 包括最后一个应该是Dense大小为 17 和softmax激活函数)。

于 2017-07-01T16:34:46.203 回答