Kuku Model Set 01 15 is a structured set of 15 PyTorch Lightning models. Each model shares the same base API but varies in one or more of these dimensions:
The “01” indicates the base dataset/config version (e.g., CIFAR-10 scaled, a specific text corpus, or a proprietary tabular set). “15” means 15 trained model instances.
After training all 15 models, we aggregate metrics:
# results_analysis.ipynb snippet import pandas as pd import globresults = [] for ckpt_dir in glob.glob("checkpoints/set_01//best.ckpt"): variant = ckpt_dir.split("/")[2] # e.g., "kuku_01_04" # Parse best_val_acc from filename acc = float(ckpt_dir.split("val_acc=")[-1].replace(".ckpt","")) results.append("variant": variant, "best_val_acc": acc) ptl models kuku model set 01 15
df = pd.DataFrame(results).sort_values("best_val_acc", ascending=False) print(df)
Example output from Kuku Model Set 01 15: Kuku Model Set 01 15 is a structured
| Variant | Best Val Accuracy | Architecture Highlights | |--------------|------------------|----------------------------------| | kuku_01_12 | 98.32% | Deep + Dropout | | kuku_01_04 | 98.11% | LayerNorm + GELU | | kuku_01_07 | 97.95% | Wide (512 dims) | | kuku_01_01 | 97.43% | Baseline shallow |
Key insight: Variant 12 (5-layer with dropout) outperformed deeper or wider models, likely due to better regularization on MNIST-scale data.
Now the magic: train all 15 variants automatically with identical conditions. The “01” indicates the base dataset/config version (e
# train_all_variants.py
import pytorch_lightning as pl
from pytorch_lightning.callbacks import ModelCheckpoint, EarlyStopping
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
kuku_model_set_01/
│
├── base/
│ └── kuku_base_model.py # Abstract LightningModule
├── variants/
│ ├── kuku_01_01.py # Baseline small model
│ ├── kuku_01_02.py # Wider layers
│ ├── kuku_01_03.py # Deeper network
│ └── ... up to 15
├── configs/
│ └── set_01_hyperparams.yaml # Shared dataset & training params
├── checkpoints/ # Auto-saved by PTL
│ └── set_01/
│ ├── kuku_01_01/
│ ├── ...
│ └── kuku_01_15/
├── logs/ # TensorBoard logs
├── train_all_variants.py
└── results_analysis.ipynb
First, we create an abstract base class that all 15 variants will inherit from. This ensures consistent training steps, optimizer setup, and validation logic.
# base/kuku_base_model.py
import torch
import torch.nn as nn
import pytorch_lightning as pl
from torchmetrics import Accuracy
class KukuBaseModel(pl.LightningModule):
def init(self, input_dim, num_classes, learning_rate=1e-3):
super().init()
self.save_hyperparameters()
self.learning_rate = learning_rate
self.criterion = nn.CrossEntropyLoss()
self.train_acc = Accuracy(task="multiclass", num_classes=num_classes)
self.val_acc = Accuracy(task="multiclass", num_classes=num_classes)
def forward(self, x):
raise NotImplementedError("Subclass must implement forward()")
def training_step(self, batch, batch_idx):
x, y = batch
logits = self(x)
loss = self.criterion(logits, y)
self.train_acc(logits, y)
self.log("train_loss", loss, prog_bar=True)
self.log("train_acc", self.train_acc, prog_bar=True)
return loss
def validation_step(self, batch, batch_idx):
x, y = batch
logits = self(x)
loss = self.criterion(logits, y)
self.val_acc(logits, y)
self.log("val_loss", loss, prog_bar=True)
self.log("val_acc", self.val_acc, prog_bar=True)
def configure_optimizers(self):
return torch.optim.Adam(self.parameters(), lr=self.learning_rate)