这篇博客,将用来记录我使用TensorFlow时,常查阅的文档入口…将实时更新,以便后续使用…
官网教程链接:
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
进行返回。
官方教程链接:
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")
默认情况下,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)
模型的导出部分,从官网的教程来看分了好几个部分:
tf.keras.callbacks.ModelCheckpoint
来保存模型的参数。tf.keras.Model.save_weight
和tf.keras.Model.load_weight
。官网教程:
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
在训练期间保存模型的参数,主要是通过调用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)
根据官方的介绍,可以将整个模型保存到单个工件中。它将包括:
参考资料链接:
1. 保存整个模型(官方教程)
2. 保存和加载整个模型(官方教程)
3. 使用 SavedModel 格式(官方教程)
4. 使用 SavedModel 完整导出模型(简单粗暴TensorFlow2)
使用方法很简单:
# 训练完模型后,直接将模型保存到目标路径
tf.saved_model.save(model, path_to_dir)
# 加载预训练模型
model = tf.saved_model.load(path_to_dir)
根据官方的介绍,可以选择仅保存和加载模型的权重。这可能对以下情况有用:
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检查点格式。