Python 是否保存完整的tf.keras模型而不保存自定义对象?
假设我们有一些模型,包括在培训期间非常重要的自定义损失和度量。是否可以保存完整的模型,以便在没有自定义对象的情况下保存权重+graphdef/pb文件 在推断过程中,不需要自定义损失和指标,因此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(即使
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()进行推理