Code around the supervision and decoding of networks in Deep Learning can quickly become a nightmare. The main cause is that interdependent maths are achieved through cascades of functions. As functions route data through their parameters, it is not rare for a modification in the flow of data to require refactoring through a whole cascade of functions. The final system is not only rigid, but only barely observable:
- Are there terms that were computed but not needed?
- Are there terms that were computed twice?
- What are the exact dependencies of each term?
In the ModulOM paper, we suggested that those issues could be solved by:
- Regrouping parameters in favor of a single object containing the data
- Regrouping those functions in classes, as methods
- Composing classes through inheritance
The resulting class instance can become the systematic function parameter, and cache the results so as to avoid recomputations.
ModulOM therefore achieves the following properties:
- A term is only computed if it is needed, and only once: when it is needed for the first time,
- Easy access to any of the terms from within, but also outside of the ModulOM,
- Multiple inheritance allows for easy combination to explore of the possible systems.
This repository just got started, please be patient if you are looking for something stable.