““ ValueError:输入0与层conv1d_1不兼容:预期ndim = 3,找到的ndim = 4”

时间:2019-12-28 22:34:36

标签: keras conv-neural-network

我正在加载VGG19模型并尝试应用1d转换来减小深度,但出现以下错误: “ 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

1 个答案:

答案 0 :(得分:0)

问题是最后一个输出是由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)-卷积层的内核高度和宽度。