📅  最后修改于: 2023-12-03 15:37:44.714000             🧑  作者: Mango
Keras 是一个高层次的神经网络 API,能够使用 Tensorflow、CNTK 或 Theano 作为后端。Keras 提供了非常简单且易于使用的接口,使得创建深度学习模型成为可能。在训练过程中,我们经常需要保存模型的权重或者整个模型。在本文中,我们将介绍如何在 Keras 中保存模型。
Keras 提供两种保存模型的方式:仅保存模型结构和仅保存模型权重。仅保存模型结构将仅保存模型的架构,但不会保存实际的权重值;仅保存模型权重将仅保存权重值,但这必须是与模型对应的结构。
要保存模型结构,我们可以使用以下代码:
from keras.models import model_from_json
# 保存模型结构
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
这将保存模型的结构到名为 model.json
的文件中。要加载模型架构,请使用以下代码:
from keras.models import model_from_json
# 加载模型结构
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
要保存模型权重,我们可以使用以下代码:
# 保存模型权重
model.save_weights("model_weights.h5")
这将保存模型权重到名为 model_weights.h5
的文件中。要加载权重,请使用以下代码:
# 加载模型权重
model.load_weights("model_weights.h5")
要保存整个模型(包括结构和权重),我们可以使用以下代码:
# 保存整个模型
model.save("model.h5")
这将保存整个模型(包括结构和权重)到名为 model.h5
的文件中。要加载模型,请使用以下代码:
# 加载整个模型
loaded_model = load_model("model.h5")
在训练深度学习模型时,我们通常会选择最好的模型(验证集上表现最佳)保存下来。这可以通过使用 Keras 的回调函数 ModelCheckpoint
来实现。在 ModelCheckpoint
中,我们需要指定将在每个时期结束时保存模型的文件名。由于我们只需要保存最佳模型,我们可以使用 save_best_only=True
来告诉 Keras 只保存最佳模型。
以下是使用 ModelCheckpoint
导出特定时期的代码示例:
from keras.callbacks import ModelCheckpoint
checkpoint_path = "weights.{epoch:02d}-{val_loss:.2f}.h5"
checkpoint_callback = ModelCheckpoint(checkpoint_path, monitor='val_loss', verbose=1, save_best_only=True)
model.fit(x_train, y_train, epochs=10, validation_split=0.2, callbacks=[checkpoint_callback])
在上面的示例中,我们将会导出验证集上损失最低的模型。每个时期结束时,ModelCheckpoint
回调将会检查当前模型的验证集损失是否低于上一个时期的最佳损失。如果是,则将保存模型权重到名为 weights.{epoch:02d}-{val_loss:.2f}.h5
的文件中,其中 {epoch:02d}
表示时期编号(例如,01 表示一位数的时期编号,02 表示两位数的时期编号),{val_loss:.2f}
表示保留两位小数的验证集损失。
在本文中,我们介绍了如何在 Keras 中保存模型及其权重,以及如何导出训练过程中的特定时期的模型。这对于深度学习模型的进一步开发和应用非常有用。