Keras &引用;ValueError:输入0与层conv1d不兼容\u 1:预期ndim=3,发现ndim=4“;

Keras &引用;ValueError:输入0与层conv1d不兼容\u 1:预期ndim=3,发现ndim=4“;,keras,conv-neural-network,Keras,Conv Neural Network,我正在加载VGG19模型并尝试应用1d conv以减少深度,但我得到以下错误: ValueError:输入0与层conv1d_1不兼容:预期ndim=3,发现ndim=4 这是我正在使用的函数: def getModel(): base_model = VGG19(weights='imagenet') model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_conv4').outpu

我正在加载VGG19模型并尝试应用1d conv以减少深度,但我得到以下错误: ValueError:输入0与层conv1d_1不兼容:预期ndim=3,发现ndim=4

这是我正在使用的函数:

def getModel():
    base_model = VGG19(weights='imagenet')
    model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_conv4').output) 
    #model.output=(None, 28, 28, 512)   
    layer=keras.layers.Conv1D(96, (512), padding='same')
    model.summary()
    out=(layer)(model.output)
    model = Model(inputs=base_model.input, outputs=out)
    model.summary()
    return model

问题是,最后一个输出是Conv2D层生成的输出,该层具有形状[批次大小、高度、宽度、通道]。这不能被
Conv1D
使用<代码>Conv1D消耗[批次大小、宽度、通道]输入。在您的情况下,由于您对减少过滤器的数量感兴趣,因此只需将
Conv1D
转换为
Conv2D

只需将功能更改为

def getModel():
    base_model = VGG19(weights='imagenet')
    model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_conv4').output) 

    # Here we are using Conv2D not Conv1D which gives 96 filters at the end.
    layer=keras.layers.Conv2D(96, (3,3), padding='same')
    model.summary()
    out=(layer)(model.output)
    model = Model(inputs=base_model.input, outputs=out)
    model.summary()
    return model
这里,

  • 96-是过滤器的数量
  • (3,3)-是卷积层的内核高度和宽度

如果不在高度和宽度轴上展开
Conv2D
输出,则无法对
Conv2D
的输出应用
Conv1D
。也许可以更清楚地解释你想要做什么。我真正想要的是将输出深度从512减少到96。