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
。