【问题标题】:Save complete tf.keras model without custom objects?保存没有自定义对象的完整 tf.keras 模型?
【发布时间】:2020-08-20 21:31:23
【问题描述】:

假设我们有一些模型,包括在训练期间很重要的自定义损失和指标。是否可以保存完整的模型,所以 weights + graphdef / pb-file,没有自定义对象?

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

tf.keras.models.load_model("some_model", custom_objects={...})

...只会使推理代码更复杂,因为需要包含自定义目标代码以进行推理(尽管未使用)。

但是,tf.keras.callbacks.ModelCheckpoint(即使使用include_optimizer=False)以及调用model.save() 总是保存模型定义包括自定义对象。

因此,只需使用...加载模型

tf.keras.models.load_model("some_model")

...总是会失败并抱怨缺少自定义对象。

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

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

当然,可以简单地使用model.save_weights(),但实际代码需要包含在以后进行推理,这是不希望的。

【问题讨论】:

    标签: python tensorflow keras save restore


    【解决方案1】:

    如果目的是防止loss和metrics的加载,可以使用load_model中的参数compile

    model = tf.keras.models.load_model("some_model", compile=False)
    

    这应该跳过损失和指标/优化器的要求,因为模型没有编译。当然你现在不能训练模型,但它应该可以很好地使用model.predict()进行推理

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多