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. W&B membantu tim ML melacak eksperimen, memvisualisasikan hasil, dan berbagi temuan dengan logging otomatis dan dashboard yang menarik.
Mengapa Weights & Biases?
Keunggulan W&B:- Automatic logging: Track metrics, hyperparameters, code
- Beautiful visualizations: Interactive dashboards
- Collaboration: Share experiments dengan tim
- Model registry: Version dan deploy models
- Sweeps: Hyperparameter optimization
- Experiment tracking
- Hyperparameter tuning
- Model comparison
- Team collaboration
- Production monitoring
Instalasi
pip install wandb
Login ke 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. Dengan 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. Dengan 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 ke init
wandb.init(
project="my-project",
config={
"learningrate": 0.001,
"architecture": "resnet50",
"dataset": "imagenet"
}
)
Method 2: Update config
wandb.config.update({
"optimizer": "adam",