保存整个模型:

整个模型的保存

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官方教程——保存和恢复模型.

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐