Introspective C++ implementation
Everything in Nieme is expressed through Frames. This base class stores a table of (attribute, value) pairs. An attribute is an identifier and values are strings, enumerations, integers, scalars, and pointer to other Frames. Instead of using classical C++ members, Nieme's implementation makes an intensive use of Frame attributes.
Thanks to Frames, Nieme supports generic operations such as :
- loading, saving, comparing and cloning Frames and Frame graphs.
- visualizing Frame graphs and generic user interfaces.
- automatic wrapping of classes.
- describing Frames with feature generators.
Now the interesting thing is that generic operations are used in two very different situations:
- Manipulating the program: e.g. loading and saving learning machines, creating instances of classes and configuring them.
- Manipulating what is manipulated by the program: e.g. describing structures as sparse vectors, cloning Reinforcement Learning states.
Data manipulated by Nieme programs is of the same nature as Nieme programs themselves. In the long term, I hope this feature will be decisive for advanced tasks such as meta-learning, representation learning or transfert learning.