我正在加载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
答案 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
在这里