keras vgg 16 形状错误

keras vgg 16 shape error

我正在尝试将具有以下形状的数据拟合到预训练的 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 的原始模型。我该如何解决这个错误?

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