tf。 load_model返回传递给优化器的意外关键字参数:名称

时间:2019-11-11 11:54:40

标签: tensorflow keras deep-learning tf.keras

我的cnn模型包含一个Lambda层。当我在保存模型后加载模型时,代码抛出错误“ TypeError:传递给优化器的意外关键字参数:name”。

def generate_matrix(input):
    ...

    return gram_output

def get_model():
    x = Input(shape = (300,300,3))
    vgg = VGG19(include_top=False, weights='imagenet')
    feats = Model(vgg.input,vgg.get_layer("block5_conv1").output)
    for layer in feats.layers:
        layer.trainable = False
    x1 = feats(x)
    x2 = Lambda(generate_matrix, name = "matrix")(x1)
    ...
    model = Model(inputs = x, outputs = predictions)
    model.summary()
    return model

model = get_model()
model.compile(...)
model.train(...)
model.save("my_model.h5")

加载我的模型

model = tf.keras.models.load_model("my_model.h5",custom_objects ={"matrix": generate_matrix})

错误:

TypeError: Unexpected keyword argument passed to optimizer: name

但是,当我加载模型的权重时没有错误。

1。保存模型的权重

model.save("my_model_weights.h5")

2。负载重量

model = get_model()
model.load_weights("my_model_weights.h5")
  1. 保存模型
model.save("my_model2.h5")
  1. 加载模型
model = tf.keras.models.load_model("my_model.h5",custom_objects ={"matrix": generate_matrix})

它将成功。为什么?

0 个答案:

没有答案