趋近智
一旦您投入时间和计算资源训练了一个深度学习模型,您肯定不希望丢失这些成果,或者每次需要使用时都重新训练它。保存训练好的模型可以暂停和继续训练,与他人共享模型,将其部署到应用程序中,或比较不同版本。保存和加载 Keras 模型及其学习参数(权重)的常用方法将被阐述。
保存模型是机器学习工作流的一个基本组成部分,原因有以下几点:
ModelCheckpoint 等回调(前面已讨论过),保存可以让您在训练中断时也能恢复到性能最好的模型状态。保存工作的最全面的方式是保存整个模型。这通常包括:
compile() 期间指定,如优化器、损失函数和指标)。Keras 为此提供了一个简单的 save() 方法。尤其是在 Keras 3 中,推荐的格式是 .keras ZIP 归档格式。与 HDF5 (.h5) 或 TensorFlow 的 SavedModel (.tf) 等旧选项相比,这是一种更现代、高效且统一的格式。
import keras
from keras import layers
import numpy as np
# 定义一个简单的序贯模型(示例)
model = keras.Sequential(
[
keras.Input(shape=(784,)),
layers.Dense(64, activation="relu"),
layers.Dense(10, activation="softmax"),
]
)
# 编译模型(示例编译)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 假设模型已经训练完成...
# model.fit(x_train, y_train, epochs=5, batch_size=32)
# 将整个模型保存到推荐格式的单个文件中
model.save("my_model.keras")
print("模型已成功保存到 my_model.keras")
这一个命令将所需的一切都打包到 my_model.keras 文件中。
要加载使用 model.save() 保存的模型,您可以使用 keras.models.load_model() 函数。此函数会重新构建模型架构,加载权重,并恢复训练配置和优化器状态。
import keras
import numpy as np
# 从文件加载模型
loaded_model = keras.models.load_model("my_model.keras")
# 验证模型概况
loaded_model.summary()
# 您现在可以使用加载的模型进行预测或继续训练
# 预测示例(需要适当的输入数据)
# dummy_input = np.random.rand(1, 784)
# predictions = loaded_model.predict(dummy_input)
# print("从加载模型中获得的预测:", predictions)
# 如果需要,您甚至可以恢复训练
# loaded_model.fit(x_train_more, y_train_more, epochs=2)
请注意,如果您的模型包含自定义层、自定义激活函数或不属于核心 Keras API 的其他自定义对象,您可能需要在加载时使用 load_model() 中的 custom_objects 参数提供这些定义。但是,对于标准层和函数,这会自动处理。
有时,您只需要保存模型的学习参数(权重),而不是整个架构或训练配置。这在以下情况下很有用:
您可以使用 save_weights() 方法仅保存权重。Keras 通常使用 HDF5 格式保存权重,通常带有 .weights.h5 扩展名,尽管也可能使用其他后端特定格式。
import keras
from keras import layers
import numpy as np
# 定义相同的简单序贯模型(示例)
model = keras.Sequential(
[
keras.Input(shape=(784,)),
layers.Dense(64, activation="relu"),
layers.Dense(10, activation="softmax"),
]
)
# 编译模型(训练需要,但不会随权重一起保存)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 假设模型已经训练完成...
# model.fit(x_train, y_train, epochs=5, batch_size=32)
# 仅保存权重
model.save_weights("my_model_weights.weights.h5")
print("模型权重已成功保存到 my_model_weights.weights.h5")
要加载使用 save_weights() 保存的权重,您首先需要创建一个具有与您保存权重的模型完全相同的架构的模型实例。然后,您在此新实例化的模型上使用 load_weights() 方法。
import keras
from keras import layers
import numpy as np
# 1. 重新创建完全相同的模型架构
new_model = keras.Sequential(
[
keras.Input(shape=(784,)),
layers.Dense(64, activation="relu"),
layers.Dense(10, activation="softmax"),
]
)
# 2. 将保存的权重加载到新的模型实例中
new_model.load_weights("my_model_weights.weights.h5")
print("模型权重加载成功。")
# 现在 `new_model` 具有学习到的权重。
# 注意:如果您想进一步训练此模型
# 或使用已编译的指标评估它,则仍需要编译此模型。
new_model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 您现在可以使用 `new_model` 进行预测。
# dummy_input = np.random.rand(1, 784)
# predictions = new_model.predict(dummy_input)
# print("从加载权重的模型中获得的预测:", predictions)
如果您尝试将权重加载到具有不同架构(例如,不同的层、不同数量的单元)的模型中,Keras 通常会引发错误。
model.save() 和 keras.models.load_model()。这是部署、共享或恢复训练最常用和推荐的方法。请使用 .keras 格式。model.save_weights() 和 model.load_weights()。这在研究环境中很常见,用于将预训练权重加载到标准或自定义架构中(例如,迁移学习)。能够有效地保存和加载模型是管理深度学习项目的一项基本技能。它与 ModelCheckpoint 等训练技术紧密结合,并在模型开发和模型部署之间架起桥梁。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造