Complete Weights & Biases Tutorial: ML Experiment Tracking and Visualization
Weights & Biases (W&B) is a powerful MLOps platform for experiment tracking, model visualization, and collaboration. It helps ML teams track experiments, visualize results, and share findings with automatic logging and beautiful dashboards.
Why Weights & Biases?
W&B Advantages:- Automatic logging: Track metrics, hyperparameters, code
- Beautiful visualizations: Interactive dashboards
- Collaboration: Share experiments with team
- Model registry: Version and deploy models
- Sweeps: Hyperparameter optimization
- Experiment tracking
- Hyperparameter tuning
- Model comparison
- Team collaboration
- Production monitoring
Installation
pip install wandb
Login to W&B
wandb login
Verify installation
python -c "import wandb; print(wandb.version)"
Quick Start
1. Basic Logging
import wandb
Initialize run
wandb.init(
project="my-ml-project",
name="experiment-1",
config={
"learningrate": 0.001,
"epochs": 100,
"batchsize": 32
}
)
Log metrics
for epoch in range(100):
loss = 1.0 / (epoch + 1)
accuracy = epoch / 100
wandb.log({
"epoch": epoch,
"loss": loss,
"accuracy": accuracy
})
Finish run
wandb.finish()
2. With PyTorch
import wandb
import torch
import torch.nn as nn
wandb.init(project="pytorch-example")
model = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 10)
)
Watch model
wandb.watch(model, log="all", logfreq=100)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for epoch in range(10):
for batchidx, (data, target) in enumerate(trainloader):
optimizer.zerograd()
output = model(data.view(-1, 784))
loss = criterion(output, target)
loss.backward()
optimizer.step()
wandb.log({
"batchloss": loss.item(),
"epoch": epoch
})
# Log epoch metrics
wandb.log({
"epoch": epoch,
"trainloss": epochloss,
"valaccuracy": valaccuracy
})
wandb.finish()
3. With scikit-learn
import wandb
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import loadiris
from sklearn.modelselection import traintestsplit
from sklearn.metrics import accuracyscore, classificationreport
wandb.init(project="sklearn-example")
Load data
X, y = loadiris(returnXy=True)
Xtrain, Xtest, ytrain, ytest = traintestsplit(X, y, testsize=0.2)
Log config
config = {
"nestimators": 100,
"maxdepth": 10,
"randomstate": 42
}
wandb.config.update(config)
Train model
model = RandomForestClassifier(*config)
model.fit(Xtrain, ytrain)
Evaluate
ypred = model.predict(Xtest)
accuracy = accuracyscore(ytest, ypred)
wandb.log({
"accuracy": accuracy,
"classificationreport": classificationreport(ytest, ypred)
})
Log model
wandb.sklearn.plotclassifier(
model, Xtrain, Xtest, ytrain, ytest,
ypred, model.predictproba(Xtest),
labels=["setosa", "versicolor", "virginica"]
)
wandb.finish()
Configuration
1. Config Management
import wandb
Method 1: Pass to init
wandb.init(
project="my-project",
config={
"learningrate": 0.001,
"architecture": "resnet50",
"dataset": "imagenet"
}
)
Method 2: Update config
wandb.config.update({
"optimizer": "adam",
"batchsize": 32