rustygrad

Inspired by Andrej Karpathy's micrograd. This repo implements a tiny Autograd engine in Rust:
- with a friendly API
- an easy-to-understand implementation
- in a minimal amount of code
The engine and the neural net are implemented in about 150 and 100 lines of code respectively (vs Andrej's 100 and 50)! About twice as long, but twice as fast!
Example usage
Below is an example showing supported operations // and their Python micrograd version
use Value;
You can run the above example with
cargo run --example engine
Training a neural net
The file mlp.rs trains a MLP binary classifier (with 2 16-node hidden layers) on a toy make_moons.csv dataset. Since plots in rust are hard, for now, here is an ascii representation of the learned solution space:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . * * * * * . . . . . . . . . . . . . . . . *
. . . . . . . . . . . . . . . . . * * * * * * * . . . . . . . . . . . . . . * *
. . . . . . . . . . . . . . . . . * * * * * * * * . . . . . . . . . . . . * * *
. . . . . . . . . . . . . . . . . * * * * * * * * * . . . . . . . . . . * * * *
. . . . . . . . . . . . . . . . . * * * * * * * * * * . . . . . . . . . * * * *
. . . . . . . . . . . . . . . . * * * * * * * * * * * . . . . . . . . * * * * *
. . . . . . . . . . . . . . . . * * * * * * * * * * * * . . . . . . * * * * * *
. . . . . . . . . . . . . . . . * * * * * * * * * * * * * . . . . * * * * * * *
. . . . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
. . . . . . . . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
You can run the above example with
cargo run --example mlp
Running tests
cargo test