我的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")
model.save("my_model2.h5")
model = tf.keras.models.load_model("my_model.h5",custom_objects ={"matrix": generate_matrix})
它将成功。为什么?