安装wandb
pip install wandb
注册wandb账号
然后在wandb官网注册一个账号,然后获取该账号的私钥。然后在命令行执行:
wandb login
然后根据提示输入私钥即可。
导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim
import wandb
初始化wandb
在脚本开始部分,需要调用 wandb.init() 来初始化一个新的wandb运行,基础的调用:
wandb.init(project="my_project", name="my_custom_run_name")
可以通过name来自定义本次运行保存的子目录名称,project名称相同的运行结果会在Weights & Biases服务器自动被分在同一个project下,
记录变量
在训练循环的每个epoch或每个batch后,使用 wandb.log 记录相应的loss或其他任何你想跟踪的metrics。简单的例子如下:
for epoch in range(epochs):
for batch in dataloader:
# 进行你的模型训练和计算
# ...
# 假设在某个时刻,你得到了以下的loss和accuracy值
loss = ...
accuracy = ...
# 通过dict记录多个变量
wandb.log({
"loss": loss.item(),
"accuracy": accuracy
})
结束
在训练结束后,调用 wandb.finish() 来通知wandb你的运行已经结束,并将所有日志数据上传到wandb:
wandb.finish()
如果服务器网络不佳,或者不想立即上传训练日志到Weights & Biases服务器时,可以使用W&B的离线模式。下面是如何使用W&B进行离线训练的步骤:
import os
os.environ["WANDB_MODE"] = "dryrun"
import wandb
wandb.init(project="my_project", settings=wandb.Settings(mode="dryrun"))
wandb sync path_to_run_directory
path_to_run_directory是你的训练日志被保存的具体目录。在W&B(Weights & Biases)中,当你启动一个新的运行时,它会在本地的wandb目录下创建一个新的子目录来保存该运行的所有日志和相关文件。默认情况下,该子目录的名称是‘run-[DATE]_[TIME]’,例如‘run-20230818_123456’。summary:summary对象,你可以用它来存储训练过程中的最佳结果。这些结果会在W&B dashboard的“Summary”部分显示。import wandb
wandb.init(project="my_project")
for epoch in range(epochs):
# 训练和评估代码
# ...
# 假设当前 epoch 的准确度是 current_accuracy
current_accuracy = ...
# 更新最佳准确度
if current_accuracy > wandb.summary.get("best_accuracy", 0.0):
wandb.summary["best_accuracy"] = current_accuracy
wandb.summary.get("best_accuracy", 0.0):表示使用python字典的 get 方法从 wandb.summary 中尝试获取 best_accuracy 的值。如果 best_accuracy 存在,它将返回其值;如果不存在,它将返回默认值 0.0。import torch
import wandb
wandb.init(project="my_project")
best_accuracy = 0.0
model = ...
for epoch in range(epochs):
# 训练和评估代码
# ...
# 假设当前 epoch 的准确度是 current_accuracy
current_accuracy = ...
if current_accuracy > best_accuracy:
best_accuracy = current_accuracy
torch.save(model.state_dict(), "best_model.pth")
wandb.save("best_model.pth")
Artifactsimport wandb
# 初始化W&B
wandb.init(project="my_project")
best_accuracy = 0.0
# 假设的训练循环
for epoch in range(epochs):
for batch in dataloader:
# 进行模型训练和计算
# ...
# 假设在某个时点你得到了这样的准确度
current_accuracy = ...
# 检查是否是新的最佳准确度
if current_accuracy > best_accuracy:
best_accuracy = current_accuracy
# 保存与最佳准确度对应的模型
torch.save(model.state_dict(), "best_model.pth")
# 创建一个Artifact并保存模型
artifact = wandb.Artifact(
type="model",
name="best_model",
metadata={"accuracy": best_accuracy})
artifact.add_file("best_model.pth")
# 上传Artifact
wandb.log_artifact(artifact)
# 使用wandb.log记录当前准确度
wandb.log({"current_accuracy": current_accuracy})


Charts里看到记录变量的曲线
Overview里可以看到具体信息,包含环境信息,运行命令,所记录的超参数以及summary记录的最佳指标等

安装 TensorBoard
如果你还没有安装 TensorBoard,可以使用 pip 进行安装:
pip install tensorboard
在代码中导入必要的库
import torch
from torch.utils.tensorboard import SummaryWriter
创建 SummaryWriter
SummaryWriter 是与 TensorBoard 交互的主要接口。你需要创建一个 SummaryWriter 对象,指定日志目录:
writer = SummaryWriter('./runs/experiment_name')
记录标量
在训练循环中,可以使用 writer.add_scalar 方法记录你想要跟踪的标量(如损失和准确率):
for epoch in range(num_epochs):
# ... training code ...
loss = ...
accuracy = ...
writer.add_scalar('Loss/train', loss, epoch)
writer.add_scalar('Accuracy/train', accuracy, epoch)
特别地,名称如果采用下列形式,则3个loss会被自动保存在同一个section,2个accuracy会被保存在同一个section :
writer.add_scalar('loss/loss1', loss1, epoch)
writer.add_scalar('loss/loss2', loss2, epoch)
writer.add_scalar('loss/loss3', loss3, epoch)
writer.add_scalar('Accuracy/train', accuracy1, epoch)
writer.add_scalar('Accuracy/valid', accuracy1, epoch)
启动 TensorBoard
另其一个命令行或终端,在命令行或终端中,运行以下命令:
tensorboard --logdir=./runs/experiment_name
查看 TensorBoard
运行上述命令之后,终端会给出一个网址,一般是http://localhost:6006/。打开浏览器并访问 http://localhost:6006/。你应该能够看到 TensorBoard 的界面,并在其中查看你记录的训练曲线。或者你可以自己指定端口号:
tensorboard --logdir=./runs/experiment_name --port 8888
则打开网站:http://localhost:8888/
关闭 SummaryWriter
训练结束后,确保关闭 SummaryWriter 以释放资源:
writer.close()