Source code for snn.optimizers

from .base import Optimizer
from .sgd import SGD
from .adam import Adam, AdamW
from .rmsprop import RMSprop
from .adagrad import Adagrad, Adadelta
from .nadam import Nadam
from .radam import RAdam
from .lion import Lion
from .lamb import LAMB
from .lookahead import Lookahead
from .adan import Adan

_REGISTRY = {
    "sgd": SGD,
    "adam": Adam,
    "adamw": AdamW,
    "rmsprop": RMSprop,
    "adagrad": Adagrad,
    "adadelta": Adadelta,
    "nadam": Nadam,
    "radam": RAdam,
    "lion": Lion,
    "lamb": LAMB,
    "adan": Adan,
    # Lookahead is a wrapper — not in string registry (wrap manually)
}


[docs] def get(identifier): """Return an :class:`Optimizer` instance from a string, instance, or dict. Parameters ---------- identifier : str, Optimizer, or dict * String key — ``"adam"``, ``"sgd"``, … * Optimizer instance — returned unchanged. * Config dict — ``{"name": "adam", "learning_rate": 1e-3}``. Any key accepted by the optimizer constructor may appear; ``"name"`` (or ``"class"``) selects the class. Raises ------ ValueError Unknown string or dict name. """ if isinstance(identifier, Optimizer): return identifier if isinstance(identifier, dict): cfg = dict(identifier) name = cfg.pop("name", cfg.pop("class", "adam")).lower() if name not in _REGISTRY: raise ValueError( f"Unknown optimizer '{name}'. Available: {list(_REGISTRY)}" ) return _REGISTRY[name](**cfg) if isinstance(identifier, str): key = identifier.lower() if key in _REGISTRY: return _REGISTRY[key]() raise ValueError( f"Unknown optimizer: '{identifier}'. Available: {list(_REGISTRY)}" ) raise TypeError(f"Could not interpret optimizer: {identifier}")
__all__ = [ "Optimizer", "SGD", "Adam", "AdamW", "RMSprop", "Adagrad", "Adadelta", "Nadam", "RAdam", "Lion", "LAMB", "Lookahead", "Adan", "get", ]