TensorFlow2.x-教程链接

这篇博客,将用来记录我使用TensorFlow时,常查阅的文档入口…将实时更新,以便后续使用…

1. 数据的读取

官网教程链接:
https://tensorflow.google.cn/tutorials/load_data/images#%E7%BC%93%E5%AD%98

简单粗暴 TensorFlow 2:
https://tf.wiki/zh_hans/basic/tools.html#tf-data

由于TensorFlow的模型在fit或者predict时,可以通过迭代器进行数据输入:建立一个类,然后重写函数iter(),将每次训练的数据在iter()函数中准备好,最后通过yield进行返回。

2. 自定义损失函数、评估函数

官方教程链接:
https://tensorflow.google.cn/guide/keras/train_and_evaluate#custom_losses

注释:方式挺多,经过使用后,感觉在建模后直接通过函数add_loss()add_metric()比较简单有效…
模板:计算BPR算法损失函数和AUC…

model = tf.keras.models.Model(inputs=inputs_list, outputs=final_outputs)
model.add_loss(
    tf.reduce_mean(
        -tf.math.log(final_outputs))
)
model.add_metric(0.5 * tf.math.sign(final_outputs - 0.5) + 0.5,
                 name="auc",
                 aggregation="mean")

3. GPU的使用与分配

默认情况下,TensorFlow 将使用几乎所有可用的显存,以避免内存碎片化所带来的性能损失。

简单粗暴 TensorFlow 2:
https://tf.wiki/zh_hans/basic/tools.html#tf-config-gpu

代码模板:

gpus = tf.config.list_physical_devices(device_type='GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(device=gpu, enable=True)

4. 模型的导出

模型的导出部分,从官网的教程来看分了好几个部分:

  1. 在训练期间,通过调用tf.keras.callbacks.ModelCheckpoint来保存模型的参数。
  2. 手动保存或加载预训练模型的参数:tf.keras.Model.save_weighttf.keras.Model.load_weight
  3. 直接将训练好的模型,进行保存(包括了编译参数等等)。

官网教程:
https://tensorflow.google.cn/tutorials/keras/save_and_load#checkpoint_%E5%9B%9E%E8%B0%83%E7%94%A8%E6%B3%95
https://tensorflow.google.cn/guide/keras/save_and_serialize#weights-only_saving_in_savedmodel_format

简单粗暴 TensorFlow 2:
https://tf.wiki/zh_hans/basic/tools.html#tf-train-checkpoint

4.1 训练期间保存模型

在训练期间保存模型的参数,主要是通过调用tf.keras.callbacks.ModelCheckpoint来实现。下面给出部分参考资料:

1. 官方调用tf.keras.callbacks.ModelCheckpoint的示例教程
2. tf.keras.callbacks.ModelCheckpoint 的API入口

# 1. 创建ModelCheckpoint实例,用于保存
checkpoint_path = "training_1/cp.ckpt"
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
                                                 save_weights_only=True,
                                                 verbose=1)

# 2. 将cp_callback 作为参数传入模型的fit方法
mode = DeepFM(...)
model.compile(...)
model.fit(train_images, 
          train_labels,  
          epochs=10,
          validation_data=(test_images, test_labels),
          callbacks=[cp_callback])
 
# 3. 创建一个新模型,并从
new_model = DeepFM(...)
new_model.load_weights(checkpoint_path)

# 4. 若保存了多个checkpoint ,加载最近的checkpoint 
latest = tf.train.latest_checkpoint(checkpoint_dir)
new_model.load_weights(latest)

默认情况下,每个epoch后都会保存一次模型参数,新一轮epoch训练后的参数会覆盖上一轮epoch保存的参数。你可以根据ModelCheckpoint 的API来更改参数。

# 设置每个epch后的文件名(uses `str.format`):每次保存的文件名都不同
checkpoint_path = "training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

batch_size = 32

# 创建一个callback ,每5轮epoch后保存一次参数
cp_callback = tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_path, 
    verbose=1, 
    save_weights_only=True,
    save_freq=5*batch_size)

# 创建模型的实例
model = DeepFM()

# 使用checkpoint_path来保存模型参数
model.save_weights(checkpoint_path.format(epoch=0))

# 使用新的callback来训练模型
model.fit(train_images, 
          train_labels,
          epochs=50, 
          batch_size=batch_size, 
          callbacks=[cp_callback],
          validation_data=(test_images, test_labels),
          verbose=0)

加载最近一次保存的模型参数:

latest = tf.train.latest_checkpoint(checkpoint_dir)

model = DeepFM()
model.load_weights(latest)

4.2 保存和加载整个模型

根据官方的介绍,可以将整个模型保存到单个工件中。它将包括:

  • 模型的架构/配置
  • 模型的权重值(在训练过程中学习)
  • 模型的编译信息(如果调用了 compile())
  • 优化器及其状态(如果有的话,使您可以从上次中断的位置重新开始训练)

参考资料链接:

1. 保存整个模型(官方教程)
2. 保存和加载整个模型(官方教程)
3. 使用 SavedModel 格式(官方教程)
4. 使用 SavedModel 完整导出模型(简单粗暴TensorFlow2)

使用方法很简单:

# 训练完模型后,直接将模型保存到目标路径
tf.saved_model.save(model, path_to_dir)

# 加载预训练模型
model = tf.saved_model.load(path_to_dir)

4.3 保存和加载模型的权重值

根据官方的介绍,可以选择仅保存和加载模型的权重。这可能对以下情况有用:

  • 只需使用模型进行推断:在这种情况下,您无需重新开始训练,因此不需要编译信息或优化器状态。
  • 正在进行迁移学习:在这种情况下,您需要重用先前模型的状态来训练新模型,因此不需要先前模型的编译信息。

1. 手动保存权重(官方教程)
2. 仅保存和加载模型的权重值(官方教程)
3. 训练检查点(官方教程)
4. tf.train.Checkpoint :变量的保存与恢复(简单粗暴TensorFlow2)

手动保存和加载模型的权重:

# 将训练好的模型的参数进行保存
model.save_weights(weight_save_path)

# 创建一个新的模型实例
new_model= DeepFM()

# 加载保存好的预训练参数
new_model.load_weights(weight_save_path)

如果模型架构截然不同,如何保存权重并将其加载到不同模型?解决方案是使用tf.train.Checkpoint来保存和恢复确切的层/变量。这里的详细教程参考《简单粗暴TensorFlow2》官方的API以及TF检查点格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值