v0.1.0 — now on PyPI

Stop eyeballing
your loss curves.

SK-AutoD diagnoses your ML training in seconds. Overfitting, exploding gradients, learning rate issues — detected automatically with confidence scores and fix recommendations.

$ pip install sk-autod
diagnosis.py
from sk_autod import diagnose report = diagnose( train_loss=[2.3, 1.9, 1.4, 0.9, 0.5], val_loss =[2.4, 2.0, 1.8, 1.9, 2.3] ) report.summary()
────────────────────────────────
SK-AutoD Diagnosis Report
────────────────────────────────
 
● CRITICAL — Classic overfitting
Detected at epoch 4 (94% confidence)
Val loss rising while train loss falls.
 
↳ Dropout (p=0.3–0.5), L2, ↓ capacity
 
────────────────────────────────
1 critical issue found.
10
detectors
0.2ms
per curve
0
extra deps
MIT
license
features

Built for the way
you actually train.

No configuration. No ML model needed to diagnose your ML model. Pure Python signal analysis, offline, instant.

01
Rule-based, not ML-based
Detectors use hand-crafted signal analysis — no training data, no neural network, no API calls. Fully interpretable and debuggable.
02
Zero configuration
Works out of the box with sensible defaults. Thresholds tuned on 100+ synthetic curves across all major pathologies.
03
Confidence-scored findings
Every finding includes a 0–100% confidence score so you know which issues to tackle first and which to monitor.
04
Extensible detectors
Subclass BaseDetector, implement one method, pass it to diagnose(). Your custom pattern in three minutes.
05
CLI + Python API + callbacks
Use it from the terminal, in a notebook, embedded in a training loop, or piped into your CI pipeline. All the same engine.
06
Lightweight
NumPy + SciPy only. No PyTorch, no TensorFlow, no heavy deps. Diagnose any framework's curves without installing it.
diagnostics engine

10 detectors.
Every common pathology.

Each detector returns a severity level, confidence score, root cause, and a concrete fix recommendation.

Detector Severity Signal detected Fix hint
Classic overfitting critical Val loss rises while train loss falls Dropout, L2 reg, ↓ capacity
Exploding gradient critical Loss spikes >300% in one epoch Gradient clipping, ↓ LR
LR too high high Loss oscillates without downtrend Reduce LR 5–10×, add warmup
Underfitting high Both losses plateau at high values ↑ capacity, train longer
Dying ReLU proxy high Loss flatlines early at high value He init, Leaky ReLU, BatchNorm
Data leakage proxy high Val loss consistently < train loss Audit train/val split
LR too low medium Loss decreases extremely slowly ↑ LR, cosine decay schedule
Noisy training medium Jagged loss, frequent direction flips ↑ batch size, gradient clipping
Label noise floor medium Loss cannot drop below a high floor Label smoothing, audit data
Missed early stopping warning Val minimum not used as checkpoint EarlyStopping, patience=3
code examples

Three APIs, one engine.

Use the full report, the one-liner, or embed a live callback in your training loop — whichever fits your workflow.

from sk_autod import diagnose train_loss = [2.3, 1.9, 1.4, 0.9, 0.5, 0.3, 0.15] val_loss = [2.4, 2.0, 1.8, 1.9, 2.3, 2.8, 3.4] report = diagnose(train_loss, val_loss) report.summary() # formatted text output report.to_dict() # JSON-serialisable dict report.to_html() # HTML report (v0.2+) # Iterate over findings for f in report.findings: print(f"{f.severity}{f.confidence:.0%} confidence") print(f" Fix: {f.fix}")
from sk_autod import quick_check # Returns a single summary string — great for notebooks print(quick_check(train_loss, val_loss)) # → "[CRITICAL] Classic overfitting at epoch 4 (94% confidence)" # Clean curve — returns a green light print(quick_check([2.3, 1.9, 1.4, 0.9, 0.5], [2.4, 2.0, 1.6, 1.4, 1.3])) # → "✓ No issues found"
from sk_autod import AutoDCallback cb = AutoDCallback(min_epochs=10, print_live=True) train_losses, val_losses = [], [] for epoch in range(100): # ... your training step ... train_losses.append(train_loss_this_epoch) val_losses.append(val_loss_this_epoch) cb.on_epoch_end(epoch, train_losses, val_losses) # Prints warnings in real-time once min_epochs is reached # Available in v0.3+
from sk_autod.detectors.base import BaseDetector from sk_autod.core.report import Finding, Severity class HighFinalLoss(BaseDetector): name = "high_final_loss" def detect(self, report): if report.train_loss[-1] > 1.0: return [Finding( pattern="high_final_loss", severity=Severity.MEDIUM, confidence=0.8, fix="Train longer or increase capacity." )] return [] report = diagnose(train_loss, val_loss, detectors=[HighFinalLoss()])
# Diagnose from inline args sk-autod diagnose \ --train-loss 2.3 1.9 1.4 0.9 0.5 0.3 0.15 \ --val-loss 2.4 2.0 1.8 1.9 2.3 2.8 3.4 # From CSV files sk-autod diagnose \ --train-file train_losses.csv \ --val-file val_losses.csv # JSON output for CI pipelines sk-autod diagnose --train-loss 2.3 1.9 ... --output json # Pipe-friendly echo "2.3 1.9 1.4 0.9" | sk-autod diagnose --train-loss -
roadmap

What's coming.

SK-AutoD is under active development. The API is stabilising fast.

v0.1.0
Foundation released
Core 5 detectors · CLI · Python API · 80%+ test coverage · PyPI publish
current
v0.2.0
Full diagnostics in progress
All 10 detectors · JSON + HTML output · loss curve visualisation
May 2026
v0.3.0
Framework callbacks planned
PyTorch + Keras callbacks · Jupyter magic integration · async support
Jun 2026
v0.4.0
Integrations planned
Weights & Biases + MLflow integrations · Adaptive thresholds
Jul 2026
v1.0.0
Stable release planned
Stable public API · full documentation site · 100% test coverage
Aug 2026
installation

Two lines to your
first diagnosis.

Requires Python 3.10+. NumPy and SciPy are the only dependencies.

from PyPI (recommended)
$ pip install sk-autod
or
from source
$ pip install git+https://github.com/shamiquekhan/SK-AutoD-ML-Library-for-Training-Curve-Auto-Diagnostician.git
Python ≥ 3.10 · NumPy · SciPy · MIT License
View on GitHub ↗ Report issue
quick-start (30 seconds)
# 1. Install pip install sk-autod # 2. Run in Python from sk_autod import diagnose report = diagnose( train_loss=[2.3, 1.9, 1.4, 0.9, 0.5], val_loss =[2.4, 2.0, 1.8, 1.9, 2.3] ) report.summary() # 3. Or use the CLI sk-autod diagnose \ --train-loss 2.3 1.9 1.4 0.9 0.5 \ --val-loss 2.4 2.0 1.8 1.9 2.3
site map

Three pages, one experience.

Use the homepage for the overview, docs for depth, and tutorial for the shortest path to first value.