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 格式。tf.saved_model.SaveOptions
对象,指定 SavedModel 保存选项。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 格式。tf.saved_model.SaveOptions
对象,指定 SavedModel 保存选项。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
。