简单入门wandb:记录、共享和协作的利器
Wandb(Weights & Biases)是一个用于记录、共享和协作的利器,能够帮助机器学习团队更高效地追踪实验和结果。它提供了一系列功能,包括实时监控、参数调优、模型版本控制和实验比较,使得机器学习的开发和调试过程更加简化和可视化。在本文中,我们将介绍如何简单入门wandb,并提供一些使用例子。
第一步是安装wandb。可以在命令行中使用以下命令安装wandb:
pip install wandb
接下来,需要在使用wandb之前进行身份验证。可以使用以下命令进行身份验证:
wandb login
这将打开一个网页,要求您登录或注册wandb帐户。登录成功后,会返回一个身份验证令牌。
现在我们来看一个使用wandb的简单例子,假设我们正在训练一个简单的线性回归模型来预测房屋价格。下面是一个示例代码:
import wandb
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 初始化wandb
wandb.init(project='linear-regression')
# 创建一个线性回归模型
model = LinearRegression()
# 生成一些训练数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)
X_train, y_train = X[:80], y[:80]
X_val, y_val = X[80:], y[80:]
# 训练模型
model.fit(X_train, y_train)
# 在验证集上进行预测
y_pred = model.predict(X_val)
# 计算均方误差
mse = mean_squared_error(y_val, y_pred)
# 通过wandb来记录指标
wandb.log({"mse": mse})
# 结束wandb的运行
wandb.finish()
在上面的代码中,我们首先通过wandb.init()函数来初始化wandb,并指定项目名称。然后我们创建了一个LinearRegression模型,并使用make_regression函数生成一些训练数据。然后我们通过model.fit()来训练模型,并使用训练好的模型在验证集上进行预测。接下来,我们使用mean_squared_error函数计算均方误差,并使用wandb.log()函数将指标记录下来。最后,我们通过wandb.finish()函数结束wandb的运行。
运行上述代码后,我们可以在wandb的网页上看到记录的指标。可以在https://wandb.ai 上登录wandb帐户,然后选择项目,就可以查看到相关记录。
除了记录指标,wandb还可以用于记录模型的训练过程。下面是一个例子:
import wandb
import torch
from torch import nn, optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
# 初始化wandb
wandb.init(project='mnist-classification')
# 设置超参数
BATCH_SIZE = 64
LEARNING_RATE = 0.01
EPOCHS = 10
# 加载MNIST数据集
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
train_set = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
test_set = datasets.MNIST(root='./data', train=False, transform=transform)
train_loader = DataLoader(train_set, batch_size=BATCH_SIZE, shuffle=True)
test_loader = DataLoader(test_set, batch_size=BATCH_SIZE, shuffle=False)
# 创建一个简单的神经网络模型
model = nn.Sequential(
nn.Linear(784, 128),
nn.ReLU(),
nn.Linear(128, 10),
nn.LogSoftmax(dim=1)
)
# 定义损失函数和优化器
criterion = nn.NLLLoss()
optimizer = optim.SGD(model.parameters(), lr=LEARNING_RATE)
# 训练模型
for epoch in range(EPOCHS):
running_loss = 0.0
for i, (inputs, labels) in enumerate(train_loader, 0):
# 将数据输入模型并计算损失
outputs = model(inputs.view(inputs.shape[0], -1))
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印损失并记录到wandb
running_loss += loss.item()
if i % 100 == 99:
print(f'Epoch: {epoch+1}, Step: {i+1}, Loss: {running_loss/100}')
wandb.log({'loss': running_loss/100})
running_loss = 0.0
# 结束wandb的运行
wandb.finish()
这个例子展示了如何使用wandb来记录模型的训练过程。首先,我们使用wandb.init()初始化wandb,并指定项目名称。然后,我们加载MNIST数据集,并创建一个简单的神经网络模型。接下来,我们定义损失函数和优化器,并使用for循环来迭代训练模型。在每个迭代的循环中,我们将数据输入模型、计算损失、进行反向传播和优化,并打印损失。同时,使用wandb.log()函数将损失记录下来。运行结束后,使用wandb.finish()函数结束wandb的运行。
通过以上例子,我们可以看到wandb的强大功能和易用性。它能够帮助我们更好地组织和管理机器学习实验,并与团队成员共享和协作。无论是在开发新模型、调试代码还是比较不同实验结果,wandb都能提供便捷和可视化的支持,使得机器学习的研究和工作更加高效和有趣。
