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.