Quick start

A typical assignment notebook, top to bottom. Every step is one line.

1. Set up

%pip install -q --upgrade colabutilscs4337
import colabutilscs4337 as cu

cu.env.check()                         # versions vs. the tested Colab runtime
cu.env.load_secrets("WANDB_API_KEY")   # only if you use W&B (see :doc:`guide/secrets`)

2. Get the data and look at it

import torch, torchvision
from torchvision import transforms

data_dir = cu.drive.data_dir()          # /content/data: fast local disk
train_ds = torchvision.datasets.FashionMNIST(data_dir, train=True, download=True,
                                             transform=transforms.ToTensor())
train_loader = torch.utils.data.DataLoader(train_ds, batch_size=64, shuffle=True)

cu.viz.show_by_class(train_ds)          # one row per class
cu.viz.show_images(train_loader)        # one batch, titled with class names

3. Build and inspect the model

model = torchvision.models.resnet18(num_classes=10)
model.conv1 = torch.nn.Conv2d(1, 64, 7, 2, 3, bias=False)   # grayscale input

cu.tools.summary(model, input_size=(1, 1, 28, 28))
cu.tools.netron(model, input_size=(1, 1, 28, 28))           # interactive graph

4. Train, saving into a run folder on Drive

run = cu.drive.new_run("resnet18-lr1e-3")   # mounts Drive, creates the folder
# ... your training loop ...
torch.save(model.state_dict(), run / "model.pth")

5. Check the predictions and explain them

model = cu.models.load_model(run / "model.pth", arch=model)   # e.g. in a new session
x, y = next(iter(train_loader))
preds = model(x.to(next(model.parameters()).device)).argmax(1).cpu()
cu.viz.show_images(x, y, train_ds.classes, preds=preds)     # wrong ones in red

cam = cu.viz.gradcam(model, x[:1])
cu.viz.show_cam(x[0], cam)