Keras 3 API 文档 / 模型 API / 保存与序列化 / 完整模型保存与加载

完整模型保存与加载

[源代码]

save 方法

Model.save(filepath, overwrite=True, zipped=None, **kwargs)

将模型保存为 .keras 文件。

参数

  • filepath: strpathlib.Path 对象。保存模型的路径。必须以 .keras 结尾(除非通过 zipped=False 将模型保存为解压缩的目录)。
  • overwrite: 是否覆盖目标位置的任何现有模型,或者通过交互式提示询问用户。
  • zipped: 是否将模型保存为压缩的 .keras 档案(本地保存时的默认值),或者作为解压缩的目录(在 Hugging Face Hub 上保存时的默认值)。

示例

model = keras.Sequential(
    [
        keras.layers.Dense(5, input_shape=(3,)),
        keras.layers.Softmax(),
    ],
)
model.save("model.keras")
loaded_model = keras.saving.load_model("model.keras")
x = keras.random.uniform((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))

请注意,model.save()keras.saving.save_model() 的别名。

保存的 .keras 文件包含

  • 模型的配置(架构)
  • 模型的权重
  • 模型优化器的状态(如果有)

因此,模型可以以完全相同的状态重新实例化。


[源代码]

save_model 函数

keras.saving.save_model(model, filepath, overwrite=True, zipped=None, **kwargs)

将模型保存为 .keras 文件。

参数

  • model: 要保存的 Keras 模型实例。
  • filepath: strpathlib.Path 对象。保存模型的路径。
  • overwrite: 是否覆盖目标位置的任何现有模型,或者通过交互式提示询问用户。
  • zipped: 是否将模型保存为压缩的 .keras 档案(本地保存时的默认值),或者作为解压缩的目录(在 Hugging Face Hub 上保存时的默认值)。

示例

model = keras.Sequential(
    [
        keras.layers.Dense(5, input_shape=(3,)),
        keras.layers.Softmax(),
    ],
)
model.save("model.keras")
loaded_model = keras.saving.load_model("model.keras")
x = keras.random.uniform((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))

请注意,model.save()keras.saving.save_model() 的别名。

保存的 .keras 文件是一个 zip 档案,其中包含

  • 模型的配置(架构)
  • 模型的权重
  • 模型优化器的状态(如果有)

因此,模型可以以完全相同的状态重新实例化。


[源代码]

load_model 函数

keras.saving.load_model(filepath, custom_objects=None, compile=True, safe_mode=True)

加载通过 model.save() 保存的模型。

参数

  • filepath: strpathlib.Path 对象,保存的模型文件的路径。
  • custom_objects: 可选字典,将名称(字符串)映射到反序列化期间要考虑的自定义类或函数。
  • compile: 布尔值,指示加载后是否编译模型。
  • safe_mode: 布尔值,指示是否禁止不安全的 lambda 反序列化。当 safe_mode=False 时,加载对象有可能触发任意代码执行。此参数仅适用于 Keras v3 模型格式。默认为 True

返回值

一个 Keras 模型实例。如果原始模型已编译,并且设置了参数 compile=True,则返回的模型将被编译。否则,模型将保持未编译状态。

示例

model = keras.Sequential([
    keras.layers.Dense(5, input_shape=(3,)),
    keras.layers.Softmax()])
model.save("model.keras")
loaded_model = keras.saving.load_model("model.keras")
x = np.random.random((10, 3))
assert np.allclose(model.predict(x), loaded_model.predict(x))

请注意,模型变量在重新加载后可能具有不同的名称值(var.name 属性,例如 "dense_1/kernel:0")。建议您使用层属性访问特定变量,例如 model.get_layer("dense_1").kernel