This guide is a compact cookbook. Generated ExDoc pages provide the full module reference.
Values and gradients
alias MicrogradEx.Value
x = Value.new(2.0, label: "x")
y = x |> Value.mul(x) |> Value.add(1.0)
gradients = Value.backward(y)
%{
y: y.data,
dy_dx: Value.grad(x, gradients)
}Neural networks
alias MicrogradEx.NN
alias MicrogradEx.NN.MLP
model = MLP.new(2, [16, 16, 1], seed: {1337, 1337, 1337})
score = NN.forward(model, [0.2, -0.3])
count = NN.parameter_count(model)count is 337 for MLP.new(2, [16, 16, 1]).
Datasets
alias MicrogradEx.Datasets
dataset = Datasets.moons(100, noise: 0.1, seed: {1337, 1337, 1337})
length(dataset.xs)
length(dataset.ys)
Enum.take(dataset.points, 3)Other deterministic helpers:
Datasets.spiral(100, noise: 0.1, seed: {1, 2, 3})
Datasets.blobs(100, noise: 0.2, seed: {1, 2, 3})Losses
alias MicrogradEx.Losses
loss = Losses.max_margin(model, dataset.xs, dataset.ys)
%{
total_loss: loss.total_loss.data,
data_loss: loss.data_loss.data,
reg_loss: loss.reg_loss.data,
accuracy: loss.accuracy
}Training
alias MicrogradEx.Trainer
run =
Trainer.train(model, dataset,
steps: 100,
alpha: 1.0e-4,
learning_rate: &Trainer.official_micrograd_learning_rate/1
)
%{
final_loss: run.final_loss,
final_accuracy: run.final_accuracy
}Plot data
alias MicrogradEx.PlotData
points = PlotData.dataset_points(dataset)
history = PlotData.loss_history(run)
accuracy = PlotData.accuracy_history(run)
boundary = PlotData.decision_boundary(run.final_model, dataset, h: 0.25)These functions return plain rows. They do not depend on Livebook or Vega-Lite.
Graph inspection
alias MicrogradEx.Graph
alias MicrogradEx.Value
gradients = Value.backward(loss.total_loss)
nodes = Graph.nodes(loss.total_loss, gradients)
edges = Graph.edges(loss.total_loss)
dot = Graph.to_dot(loss.total_loss, gradients)The DOT text can be copied into a Graphviz renderer, but Graphviz is not required by MicrogradEx.