【发布时间】:2018-04-10 09:55:38
【问题描述】:
我需要提供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抱怨层数不相等。
【问题讨论】:
-
我认为您正在尝试做的事情存在一个根本问题:
C的形状为 (3, 496, 496, 8),与 VGG19 的预期不兼容。 VGG19 的输入形状应该正好有 3 个通道。 -
好的,我已经编辑了我的帖子,但问题仍然存在。
-
这似乎与github.com/keras-team/keras/issues/7013有关,但尚未解决。
标签: tensorflow keras