Small immutable training loops for MicrogradEx models.
train/3 follows the official micrograd demo rhythm: compute a scalar loss,
run reverse-mode autodiff, and apply an SGD-style parameter update that
returns a new model.
Summary
Functions
The learning-rate schedule used by the official micrograd demo.
Trains a model on a dataset or {xs, ys} examples.
Types
@type dataset_or_examples() :: MicrogradEx.Datasets.Dataset.t() | {list(), list()}
@type learning_rate() :: number() | (non_neg_integer() -> number())
@type opts() :: [ steps: pos_integer(), alpha: number(), batch_size: nil | pos_integer(), learning_rate: learning_rate(), seed: {integer(), integer(), integer()} | nil, log_every: pos_integer(), loss: :max_margin ]
Functions
@spec official_micrograd_learning_rate(non_neg_integer()) :: float()
The learning-rate schedule used by the official micrograd demo.
It preserves the original formula exactly:
1.0 - 0.9 * k / 100Examples
iex> MicrogradEx.Trainer.official_micrograd_learning_rate(0)
1.0
iex> MicrogradEx.Trainer.official_micrograd_learning_rate(100)
0.1
@spec train(MicrogradEx.NN.model(), dataset_or_examples(), opts()) :: MicrogradEx.Trainer.Run.t()
Trains a model on a dataset or {xs, ys} examples.
Options:
:steps- positive integer, default100:alpha- max-margin L2 regularization scale, default1.0e-4:batch_size-nilfor full-batch or a positive integer:learning_rate- non-negative number or one-argument function:seed- deterministic mini-batch seed, default{1337, 1337, 1337}:log_every- positive integer history cadence, default1:loss- currently only:max_margin
The final step is always present in history even when :log_every would
otherwise skip it.