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