Python 是否保存完整的tf.keras模型而不保存自定义对象?

Python 是否保存完整的tf.keras模型而不保存自定义对象?,python,tensorflow,keras,save,restore,Python,Tensorflow,Keras,Save,Restore,假设我们有一些模型,包括在培训期间非常重要的自定义损失和度量。是否可以保存完整的模型,以便在没有自定义对象的情况下保存权重+graphdef/pb文件 在推断过程中,不需要自定义损失和指标,因此 tf.keras.models.load_model("some_model", custom_objects={...}) …只会使推理代码更加复杂,因为需要包含自定义对象代码进行推理(尽管未使用) 但是,tf.keras.callbacks.ModelCheckpoint(即使

假设我们有一些模型,包括在培训期间非常重要的自定义损失和度量。是否可以保存完整的模型,以便在没有自定义对象的情况下保存权重+graphdef/pb文件

在推断过程中,不需要自定义损失和指标,因此

tf.keras.models.load_model("some_model", custom_objects={...})
…只会使推理代码更加复杂,因为需要包含自定义对象代码进行推理(尽管未使用)

但是,
tf.keras.callbacks.ModelCheckpoint
(即使使用
include\u optimizer=False
)以及调用
model.save()
始终保存包含自定义对象的模型定义

因此,只需在模型中加载

tf.keras.models.load_model("some_model")
…将始终失败并抱怨缺少自定义对象

是否有可能在没有自定义损失/指标的情况下以某种方式保存整个模型?要获得易于加载的网络“推理”版本

或者,唯一的解决方案是将所有内容冻结到TFLite模型中


当然,可以简单地使用
model.save_weights()
,但随后需要包含实际代码以供推断,这是不需要的。

如果目的是防止加载损失和度量,则可以使用
加载模型中的参数
compile

model = tf.keras.models.load_model("some_model", compile=False)
这应该跳过损失和度量/优化器的要求,因为模型没有编译。当然,您现在无法训练模型,但它应该可以很好地用于使用
model.predict()进行推理