Complete Weights & Biases Tutorial: Experiment Tracking for Machine Learning

# Tutorial Lengkap Weights & Biases: ML Experiment Tracking dan Visualization Weights & Biases (W&B) adalah platform MLOps yang powerful untuk experiment tracking, visualisasi model, dan kolaborasi....

By Ruby Abdullah · · tutorial
Weights & BiasesMLOpsExperiment TrackingPythonMachine LearningModel Monitoring

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

Use Cases:
  • 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

Related Articles