Weights & Biases (W&B) 新手教程
Weights & Biases (简称 W&B) 是一个强大的工具,用于跟踪机器学习实验、可视化结果、管理模型和协作。它为研究人员和开发者提供了一个方便的界面来监控训练过程,分析数据,并分享实验结果。
目录
1. W&B 的特点
- 实验跟踪:记录超参数、指标、模型和代码版本,确保实验可复现。
- 实时可视化:实时生成训练曲线,方便调试和优化模型。
- 协作:团队成员可以共享实验结果,促进协作。
- 集成性强:支持 TensorFlow、PyTorch、Keras、Scikit-learn 等多种框架。
- 云存储:实验数据自动同步到云端,方便随时随地访问。
2. 安装 W&B
在开始使用 W&B 之前,需要先安装其 Python 库:
pip install wandb
安装完成后,需要登录或注册一个 W&B 账号。可以通过以下方式登录:
wandb login
运行该命令后,会提示你访问一个 URL,在浏览器中打开并登录 W&B 账号(用edu邮箱注册可以有免费会员),复制 API 密钥即可完成登录。
3. 快速开始:基础用法
以下是 W&B 的基本用法示例,使用 PyTorch 框架记录一个简单的训练过程。
3.1 初始化 W&B
在你的代码中,先导入 W&B 并初始化:
import wandb
# 初始化一个新的 W&B run
wandb.init(project="my-first-project", name="experiment-1")
project
:指定项目名称。如果项目不存在,W&B 会自动创建。name
:为当前实验命名(可选)。
3.2 记录模型参数和指标
在训练过程中,你可以记录超参数和训练指标:
# 记录超参数
config = {
"learning_rate": 0.001,
"batch_size": 32,
"epochs": 10
}
wandb.config.update(config)
# 模拟记录训练损失
for epoch in range(config["epochs"]):
train_loss = 0.01 * (config["epochs"] - epoch) # 假设损失逐渐降低
wandb.log({"epoch": epoch, "train_loss": train_loss})
wandb.config
:记录超参数,便于在实验中对比。wandb.log
:记录指标(如训练损失、验证准确率等)。
4. 记录模型参数与指标
W&B 支持记录各种类型的数据,包括:
4.1 记录标量 (Scalars)
比如训练损失、准确率等:
wandb.log({"train_loss": train_loss, "val_accuracy": val_acc})
4.2 记录图像
可以记录模型生成的图像或训练过程中的中间结果:
import numpy as np
from PIL import Image
# 假设我们有一个 NumPy 数组表示的图像
image = np.random.rand(128, 128, 3) * 255 # 随机生成图像
wandb.log({"sample_image": wandb.Image(image, caption="Generated Image")})
4.3 记录表格数据
可以将训练过程中的数据以表格形式记录:
wandb.log({"examples": wandb.Table(data=[[1, 2], [3, 4]], columns=["Input", "Output"])})
5. 可视化和分析结果
W&B 的强大之处在于它可以自动生成可视化图表,帮助你分析结果。
5.1 实时查看训练曲线
在训练过程中,你可以实时查看损失曲线、准确率曲线等。只需打开 W&B 的项目页面即可。
5.2 对比实验结果
W&B 可以轻松比较不同实验的性能。在项目页面中,你可以选择多个实验并生成对比图表。
6. 保存与加载模型
W&B 支持保存模型到云端,并从云端加载模型。
6.1 保存模型
torch.save(model.state_dict(), "model.pth")
wandb.save("model.pth")
6.2 加载模型
你可以从 W&B 的云端下载模型文件并加载:
model_path = wandb.restore("model.pth").name
model.load_state_dict(torch.load(model_path))
7. 高级功能介绍
7.1 超参数优化
W&B 提供了超参数优化工具,可以自动调参:
sweep_config = {
"method": "random", # 随机搜索
"parameters": {
"learning_rate": {"values": [0.001, 0.01, 0.1]},
"batch_size": {"values": [16, 32, 64]}
}
}
# 创建 sweep
sweep_id = wandb.sweep(sweep_config, project="my-first-project")
# 启动 sweep
def train():
wandb.init()
config = wandb.config
# 使用 config.learning_rate 和 config.batch_size 训练模型
pass
wandb.agent(sweep_id, function=train)
7.2 共享实验结果
W&B 支持生成实验报告,方便与团队或客户共享。只需点击项目页面中的“Report”按钮即可。
7.3 自定义面板
你可以在 W&B 的项目页面中自定义面板和图表布局,以满足特定的分析需求。
8. 总结
通过本教程,你已经掌握了 W&B 的基础使用方法,包括:
- 安装与初始化 W&B
- 记录超参数和指标
- 可视化训练过程
- 保存与加载模型
- 使用高级功能(如超参数优化)