VyntriVyntri
Examples

Configuration

Backbone, adaptation, shrinkage, and cache configuration examples.

Default config

default.py
from vyntri import Vyntri
from vyntri.data import split

# Just use defaults — MobileNetV3, FK projection, diagonal shrinkage
s = split("./my_dataset", train=0.7, test=0.2, seed=42)
model = Vyntri()
model.fit(train=s.train, val=s.val)

Auto backbone selection

Requires a validation set. Use split() to create one, or pass an explicit train/val layout.

auto_backbone.py
from vyntri import Vyntri
from vyntri.data import split

# Auto backbone requires validation — split() provides one by default
s = split("./my_dataset", train=0.7, val=0.1, test=0.2, seed=42)
model = Vyntri(backbone="auto")
model.fit(train=s.train, val=s.val)

# See which backbone was selected
sel = model.metadata_["selection"]
print(f"Selected: {sel['selected']}")
print(f"Scores: {sel['scores']}")

Auto with candidate control

Limit which backbones are evaluated during auto-selection.

candidates.py
from vyntri import Vyntri
from vyntri.data import split

s = split("./my_dataset", train=0.7, val=0.1, test=0.2, seed=42)

# Only evaluate two fast backbones
model = Vyntri(
    backbone="auto",
    candidates=["mobilenet_v3_small", "resnet18"],
)
model.fit(train=s.train, val=s.val)

sel = model.metadata_["selection"]
print(f"Selected from limited set: {sel['selected']}")

Custom backbone

custom_backbone.py
from vyntri import Vyntri
from vyntri.data import split

# Use EfficientNet-B0
s = split("./my_dataset", train=0.7, test=0.2, seed=42)
model = Vyntri(backbone="efficientnet_b0")
model.fit(train=s.train, val=s.val)
print(f"Feature dim: {model.feature_dim_}")  # 1280

SLCE projection

slce.py
from vyntri import Vyntri
from vyntri.data import split

s = split("./my_dataset", train=0.7, test=0.2, seed=42)
model = Vyntri(adaptation="slce")
model.fit(train=s.train, val=s.val)

# Inspect SLCE diagnostics
print(f"Positive eigenvalues: {model.projection_.n_positive_}")
print(f"Spectrum: {model.projection_.spectrum_}")

Ledoit-Wolf shrinkage

ledoit_wolf.py
from vyntri import Vyntri
from vyntri.data import split

s = split("./my_dataset", train=0.7, test=0.2, seed=42)
model = Vyntri(shrinkage="ledoit_wolf")
model.fit(train=s.train, val=s.val)

# See estimated shrinkage intensity
alpha = model.projection_.shrinkage_alpha_
print(f"Estimated shrinkage alpha: {alpha:.3f}")

Custom regularization

regularization.py
from vyntri import Vyntri
from vyntri.data import split

s = split("./my_dataset", train=0.7, test=0.2, seed=42)

# Higher regularization (more bias, less variance)
model = Vyntri(regularization=1e-3)
model.fit(train=s.train, val=s.val)

# Lower regularization
model = Vyntri(regularization=1e-5)
model.fit(train=s.train, val=s.val)

Custom projection dimension

projection_dim.py
from vyntri import Vyntri
from vyntri.data import split

s = split("./my_dataset", train=0.7, test=0.2, seed=42)

# Force a specific projection dimension
model = Vyntri(projection_dim=32)
model.fit(train=s.train, val=s.val)

# None = auto-resolve to min(128, feature_dim, C-1)
model = Vyntri(projection_dim=None)
model.fit(train=s.train, val=s.val)

Disable caching

no_cache.py
from vyntri import Vyntri
from vyntri.data import split

# Disable feature caching (always extract from scratch)
s = split("./my_dataset", train=0.7, test=0.2, seed=42)
model = Vyntri(cache_enabled=False)
model.fit(train=s.train, val=s.val)

Custom cache directory

cache_dir.py
from vyntri import Vyntri
from vyntri.data import split

# Store cache in a custom location
s = split("./my_dataset", train=0.7, test=0.2, seed=42)
model = Vyntri(cache_dir="./my_cache")
model.fit(train=s.train, val=s.val)

Discover all options

describe.py
from vyntri import Config

# Get documentation for all configuration parameters
docs = Config.describe()
for param, info in docs.items():
    print(f"{param}: {info['description'][:60]}...")

# Get documentation for a single parameter
info = Config().describe_param("backbone")
print(info)