void mg_zero_grad(mg_graph *g)
Set all mg_value gradients in a graph to zero.
mg_value * mg_add(mg_graph *g, mg_value *a, mg_value *b)
Add two values.
bool mg_backward(mg_graph *g, mg_value *out)
Compute gradients for all values that contribute to an output value.
mg_graph_checkpoint mg_graph_save(const mg_graph *g)
Create a snapshot of the graph's current allocation state.
void mg_graph_restore(mg_graph *g, mg_graph_checkpoint checkpoint)
Restore the graph to a previous checkpoint.
float mg_grad(const mg_value *v)
Get the gradient of a value.
mg_value * mg_square(mg_graph *g, mg_value *a)
Square a value.
struct mg_graph mg_graph
Opaque owner of a linked list of mg_value nodes.
Definition value.h:22
void mg_set_grad(mg_value *v, float grad)
Set the gradient of a value.
void mg_graph_free(mg_graph *g)
Free a graph and all values it owns.
mg_value * mg_scalar(mg_graph *g, float data)
Create a new scalar value.
mg_value * mg_mul(mg_graph *g, mg_value *a, mg_value *b)
Multiply two values.
mg_value * mg_pow(mg_graph *g, mg_value *a, mg_value *b)
Raise one value to the power of another.
mg_value * mg_neg(mg_graph *g, mg_value *a)
Negate a value.
mg_value * mg_div(mg_graph *g, mg_value *a, mg_value *b)
Divide one value by another.
mg_value * mg_relu(mg_graph *g, mg_value *a)
Apply the ReLU activation function to a value.
struct mg_value mg_value
Opaque scalar node in a computation graph.
Definition value.h:30
mg_value * mg_sub(mg_graph *g, mg_value *a, mg_value *b)
Subtract one value from another.
mg_graph * mg_graph_new(void)
Create a new graph.
mg_value * mg_tanh(mg_graph *g, mg_value *a)
Apply the tanh activation function to a value.
void mg_set_data(mg_value *v, float data)
Set the scalar data of a value.
float mg_data(const mg_value *v)
Get the scalar data of a value.
mg_value * mg_exp(mg_graph *g, mg_value *a)
Apply the exponential function to a value.
Snapshot of a graph's allocation state.
Definition value.h:38
size_t len
Definition value.h:40
mg_value * values
Definition value.h:39