Micrograd.jl
A Julia implementation of Andrej’s micrograd python package.
should be fully functional right now, waiting for further integration with Graph.jl and pruning the code.
Example
use of simple autograd engine
using Micrograds
defaultVal = Value{Float64}
a = defaultVal(data = 2.0,label = "a")
b = defaultVal(data = 1., label = "b")
c = a + b; c.label = "c"
e = defaultVal(data = 4., label = "e")
d = c * e; d.label = "d"
f = relu(d)
drawgraph(f)
backward(f)
drawgraph(f)
basic use of simple nn engine
draw_graph with Neuron
julia> n = Neuron(2)
relu Neuron(2)
julia> x = [1., -2.]
2-element Vector{Float64}:
1.0
-2.0
julia> y = n(x)
Value(,data=0.6758447934023317)
drawgraph(y)
MLP class and zero_grad function
julia> model = MLP(2, [16, 16, 1])
MLP of [Layer of [relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2), relu Neuron(2)], Layer of [relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16), relu Neuron(16)], Layer of [Linear Neuron(16)]]
julia> parameters(model)
337-element Vector{defaultVal}:
Value(,data=0.5122986272799579)
Value(,data=0.6781612733121447)
Value(,data=0.11625663289119348)
Value(,data=0.887231745763768)
Value(,data=0.8954375060553358)
Value(,data=0.9228937920964062)
⋮
Value(,data=0.3878971821596451)
Value(,data=0.6597339179360313)
Value(,data=0.17120071350754384)
Value(,data=0.04221921543377716)
Value(,data=0.46509360358631824)
julia> zero_grad(model)
337-element Vector{Float64}:
0.0
0.0
0.0
0.0
0.0
0.0
⋮
0.0
0.0
0.0
0.0
0.0
Use of nn engine to train batched model
should show up in the nn_demo.jl file(todo)