save 方法Model.save(filepath, overwrite=True, save_format=None, **kwargs)
将模型保存为 TensorFlow SavedModel 或 HDF5 文件。
有关详细信息,请参阅序列化和保存指南。
参数
str 或 pathlib.Path 对象。保存模型的路径。"keras"、"tf" 或 "h5",指示是将模型保存在原生 TF-Keras 格式 (.keras)、TensorFlow SavedModel 格式(下文简称 "SavedModel")还是旧版 HDF5 格式 (.h5)。在 TF 2.X 中默认为 "tf",在 TF 1.X 中默认为 "h5"。SavedModel 格式参数: include_optimizer:仅适用于 SavedModel 和旧版 HDF5 格式。如果为 False,则不保存优化器状态。默认为 True。 signatures:仅适用于 SavedModel 格式。要与 SavedModel 一起保存的签名。有关详细信息,请参阅 tf.saved_model.save 中的 signatures 参数。 options:仅适用于 SavedModel 格式。指定 SavedModel 保存选项的 tf.saved_model.SaveOptions 对象。 save_traces:仅适用于 SavedModel 格式。启用后,SavedModel 将存储每个层的函数跟踪。可以禁用此功能,以便仅存储每个层的配置。默认为 True。禁用此功能将缩短序列化时间并减小文件大小,但这要求所有自定义层/模型都实现 get_config() 方法。
示例
model = tf.keras.Sequential([
tf.keras.layers.Dense(5, input_shape=(3,)),
tf.keras.layers.Softmax()])
model.save("model.keras")
loaded_model = tf.keras.models.load_model("model.keras")
x = tf.random.uniform((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))
请注意,model.save() 是 tf.keras.models.save_model() 的别名。
save_model 函数tf_keras.saving.save_model(
model, filepath, overwrite=True, save_format=None, **kwargs
)
将模型保存为 TensorFlow SavedModel 或 HDF5 文件。
有关详细信息,请参阅序列化和保存指南。
参数
str 或 pathlib.Path 对象。保存模型的路径。"keras"、"tf" 或 "h5",指示是将模型保存在原生 TF-Keras 格式 (.keras)、TensorFlow SavedModel 格式(下文简称 "SavedModel")还是旧版 HDF5 格式 (.h5)。在 TF 2.X 中默认为 "tf",在 TF 1.X 中默认为 "h5"。SavedModel 格式参数: include_optimizer:仅适用于 SavedModel 和旧版 HDF5 格式。如果为 False,则不保存优化器状态。默认为 True。 signatures:仅适用于 SavedModel 格式。要与 SavedModel 一起保存的签名。有关详细信息,请参阅 tf.saved_model.save 中的 signatures 参数。 options:仅适用于 SavedModel 格式。指定 SavedModel 保存选项的 tf.saved_model.SaveOptions 对象。 save_traces:仅适用于 SavedModel 格式。启用后,SavedModel 将存储每个层的函数跟踪。可以禁用此功能,以便仅存储每个层的配置。默认为 True。禁用此功能将缩短序列化时间并减小文件大小,但这要求所有自定义层/模型都实现 get_config() 方法。
示例
model = tf.keras.Sequential([
tf.keras.layers.Dense(5, input_shape=(3,)),
tf.keras.layers.Softmax()])
model.save("model.keras")
loaded_model = tf.keras.saving.load_model("model.keras")
x = tf.random.uniform((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))
请注意,model.save() 是 tf.keras.saving.save_model() 的别名。
SavedModel 或 HDF5 文件包含
因此,可以在完全相同的状态下重新实例化模型,而无需用于模型定义或训练的任何代码。
请注意,加载后模型权重可能具有不同的范围名称(例如 "dense_1/kernel:0")。建议使用层属性访问特定变量,例如 model.get_layer("dense_1").kernel。
SavedModel 序列化格式
使用 save_format="tf",模型及其附带的所有可跟踪对象(例如层和变量)将保存为 TensorFlow SavedModel。模型配置、权重和优化器都包含在 SavedModel 中。此外,对于附属于模型的每个 TF-Keras 层,SavedModel 会存储
跟踪的函数允许 SavedModel 格式在没有原始类定义的情况下保存和加载自定义层。
您可以通过禁用 save_traces 选项来选择不保存跟踪的函数。这将减少保存模型所需的时间以及输出 SavedModel 占用的磁盘空间。如果启用此选项,则在加载模型时**必须**提供所有自定义类定义。请参阅 tf.keras.saving.load_model 中的 custom_objects 参数。
load_model 函数tf_keras.saving.load_model(
filepath, custom_objects=None, compile=True, safe_mode=True, **kwargs
)
加载通过 model.save() 保存的模型。
参数
str 或 pathlib.Path 对象,保存的模型文件路径。lambda 反序列化。当 safe_mode=False 时,加载对象有触发任意代码执行的风险。此参数仅适用于 TF-Keras v3 模型格式。默认为 True。SavedModel 格式参数: options:仅适用于 SavedModel 格式。可选的 tf.saved_model.LoadOptions 对象,指定 SavedModel 加载选项。
返回值
一个 TF-Keras 模型实例。如果原始模型已编译,并且设置了参数 compile=True,则返回的模型也将编译。否则,模型将保持未编译状态。
示例
model = tf.keras.Sequential([
tf.keras.layers.Dense(5, input_shape=(3,)),
tf.keras.layers.Softmax()])
model.save("model.keras")
loaded_model = tf.keras.saving.load_model("model.keras")
x = tf.random.uniform((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))
请注意,重新加载后,模型变量可能具有不同的名称值(var.name 属性,例如 "dense_1/kernel:0")。建议使用层属性访问特定变量,例如 model.get_layer("dense_1").kernel。