首页 文章

Kerras模型的定义在模型的输入张量是另一个模型的输出时发生变化

提问于
浏览
-2

我需要提供model1的输出作为model2的输入 .

A=keras.layers.Input(batch_shape=(3,500,500,3))
B=keras.layers.Conv2D(filters=3, kernel_size=3)(A)
model1=keras.models.Model(A,B)
C=keras.layers.Conv2D(filters=3, kernel_size=3)(B)
model2=keras.applications.vgg19.VGG19(input_tensor=B, weights='imagenet', include_top=False, pooling='avg')
#Error: You are trying to load a weight file containing 16 layers into a model with 17 layers.

正如错误消息所示,keras无法正确实现vgg net .

vgg19网包含23层(没有顶部) . 但是如果输入张量是另一个模型的输出,则层数会发生变化 .

vgg19_normal=keras.applications.vgg19.VGG19(input_tensor=A, weights=None, include_top=False, pooling='avg')
len(vgg19_normal.layers)
#23

vgg19_abnormal=keras.applications.vgg19.VGG19(input_tensor=B, weights=None, include_top=False, pooling='avg')
#input tensor B is the output of model1
len(vgg19_abnormal.layers)
#24

所以keras抱怨层数不相等 .

1 回答

  • 0

    我仍有一些疑问,例如我不明白 C 的用途 . 无论如何,这是我目前的想法:

    A=keras.layers.Input(batch_shape=(3,500,500,3))
    B=keras.layers.Conv2D(filters=3, kernel_size=3)(A)
    model1=keras.models.Model(A,B)
    C=keras.layers.Conv2D(filters=3, kernel_size=3)(B)
    vgg19=keras.applications.vgg19.VGG19(weights='imagenet', include_top=False, pooling='avg')(model1.output)
    model2=keras.models.Model(inputs=A, outputs=vgg19)
    

    由此产生的 model2 拓扑结构为

    enter image description here

    为了生成这个图像,我使用了keras.utils.plot_model .

相关问题