【问题标题】:Saving Tensorflow models with custom layers使用自定义层保存 TensorFlow 模型
【发布时间】:2021-02-19 17:38:08
【问题描述】:
我通读了文档,但我不清楚:如果我编写了一个自定义层然后在模型中使用它,我可以将模型保存为 SavedModel 并且自定义层会自动进入其中还是执行我也必须保存自定义图层?
我尝试仅以 H5 格式保存模型,而不是自定义层。当我尝试加载模型时,自定义层无法识别或类似的错误。通读文档,我看到将自定义对象保存为 H5 格式有点复杂。但它如何与 SavedModels 一起使用?
【问题讨论】:
标签:
python
tensorflow
model
save
【解决方案1】:
如果我理解您的问题,您应该直接使用tf.keras.models.save_model(<model_object>,'file_name',save_format='tf')。
我的理解是“tf”格式会自动保存自定义图层,因此加载不需要所有库都存在。这并没有扩展到所有自定义对象,但我不知道这种区别在哪里。如果要加载使用非层自定义对象的模型,则必须使用 tf.keras.models.load_model() 中的 custom_objects 参数。仅当您想在加载后立即训练时才需要这样做。如果您不打算立即训练模型,您应该可以放弃custom_objects,而只需在load_model 中设置compile=False。
如果您想使用“h5”格式,您应该拥有并加载自定义对象使用的所有库/模块/包,以便“h5”加载工作。我知道我以前用初始化器做过这个。这可能对层无关紧要,但我认为它确实如此。
您还需要在自定义对象定义中实现get_config() 和save_config() 函数,以便“h5”正确保存和加载。