保存整个模型:
整个模型的保存
1.整个模型可以以两种不同的文件格式(SavedModel 和 HDF5)进行保存
2.调用 model.save 将保存模型的结构,权重和训练配置保存在单个文件/文件夹中。
3.导出模型,以便在不访问原始 Python 代码*的情况下使用它。
4.优化器状态(optimizer-state)已经恢复,可以从中断的位置恢复训练。
这种方式加载的时候会直接返回一个model,而其他方式是要先创建model再加载
#第一种
#保存到文件夹中
dir_name="save_model/mymodel"
model.save(dir_name)
new_model=tf.keras.models.load_model(dir_name)
#第二种(HDF5文件)
#保存到文件中
file_name="my_model.h5"
model.save(file_name)
new_model=tf.keras.models.load_model(file_name)
手动保存权重:
默认情况下, tf.keras 和 save_weights 使用 TensorFlow checkpoints 格式 .ckpt 扩展名
dir_name="./checkpoints/my_checkpoint"
model.save_weights(dir_name)
model.load_weights(dir_name)
在训练期间保存模型(以 checkpoints 形式保存):
使用训练好的模型而无需从头开始重新训练,或在打断的地方开始训练,以防止训练过程没有保存
Checkpoints 包含:
一个或多个包含模型权重的分片。
索引文件,指示哪些权重存储在哪个分片中。
如果你只在一台机器上训练一个模型,你将有一个带有后缀的碎片: .data-00000-of-00001
checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
#传递到model.fit()中的callbacks参数中即可,它决定了模型保存如何保存
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
save_weights_only=True,
verbose=1)
model.load_weights(checkpoint_path)
# 在文件名中包含 epoch (使用 `str.format`)
checkpoint_path = "training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
# 创建一个回调,每 5 个 epochs 保存模型的权重
cp_callback = tf.keras.callbacks.ModelCheckpoint(
filepath=checkpoint_path,
verbose=1,
save_weights_only=True,
period=5)
latest = tf.train.latest_checkpoint(checkpoint_dir)
model.load_weights(latest)
保存自定义对象:
SavedModel 能够保存自定义对象,例如子类化模型和自定义层,而无需原始代码。HDF5要自定义一些方法。
API总结:
保存方式 | 保存 | 加载 |
---|---|---|
model | model.save() | tf.keras.models.load_model() |
手动 | model.save_weights() | model.load_weights() |
checkpoints | tf.keras.callbacks.ModelCheckpoint() | model.load_weights() |
学习文章链接(需翻墙): tensorflow2官方教程——保存和恢复模型.