Keras &引用;ValueError:输入0与层conv1d不兼容\u 1:预期ndim=3,发现ndim=4“;
我正在加载VGG19模型并尝试应用1d conv以减少深度,但我得到以下错误: ValueError:输入0与层conv1d_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
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。