Attempt to reproduce Andrej Karpathy's migrograd auto differentiation engine in C++.
I am an absolute newbie at C++, so please do not use this code for anything important. :)
Value
is the user-facing class (meant for being used as a stack object by the user). There's a
hidden Node
graph behind it (every Value
has an underlying Node
), and Nodes
can live
on if referenced from other nodes in the graph. std::shared_ptr
seems to work nicely here
and there don't seem to be any memory management issues
(Famous last words. You can tell that I still have a novice's confidence.).
This being a template class, I was torn about file structure. Currently, the last line of
picograd/value.h
imports picograd/value.hpp
.
In Qt Creator, this causes cyclic import warnings. If these annoy you, pasting the contents
of value.hpp
at the spot of the import and removing its own import of value.h
should fix it.