[英]tf.keras custom layer requiring initialization fails to save with tf.contrib.saved_model.save_keras_model
[英]Save complete tf.keras model without custom objects?
假设我们有一些 model 包括在训练期间很重要的自定义损失和指标。 是否可以保存完整的 model,所以 weights + graphdef / pb 文件,没有自定义对象?
在推理过程中,不需要自定义损失和指标,因此......
tf.keras.models.load_model("some_model", custom_objects={...})
...只会使推理代码更加复杂,因为需要包含自定义 object 代码进行推理(尽管未使用)。
但是, tf.keras.callbacks.ModelCheckpoint
(即使使用include_optimizer=False
)以及调用model.save()
始终保存Z20F35E630DAF44DBFA4C3F68F5399D8的自定义定义
因此,只需将 model 加载...
tf.keras.models.load_model("some_model")
...总是会失败并抱怨缺少自定义对象。
是否可以在没有自定义损失/指标的情况下以某种方式保存整个 model? 要获得易于加载的网络“推理”版本?
或者是将所有内容冻结到 TFLite model 的唯一解决方案?
当然,可以简单地使用model.save_weights()
,但随后需要包含实际代码以便稍后进行推理,这是不希望的。
如果目的是防止加载损失和指标,可以使用load_model
中的参数compile
:
model = tf.keras.models.load_model("some_model", compile=False)
这应该跳过损失和指标/优化器的要求,因为 model 未编译。 当然,您现在无法训练 model,但使用model.predict()
进行推理应该可以正常工作
我也有同样的需求。 在我的例子中,自定义对象是构建 model 架构所必需的。
有没有办法将 de savedmodel 文件转换为不需要加载 custom_objects 的某种格式?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.