Shark directory layout

The below diagram gives an overview over the Shark directory structure after having extracted the source code package of shark.

Note

The locations and/or contents of the listed folders may differ for the pre-compiled binary packages and installers. The contents of the include/ folder however, are the same across all installation packages.

Shark directory structure after installing from source.

The include/ folder’s structure well mirrors the Shark library’s design choices:

  • The Core/ Folder provides basic interfaces and functionality for math and other utility functions in shark.
  • In LinAlg/, basic vector and matrix functionality is implemented (e.g., by wrapping the Boost C++ uBLAS libraries).
  • The Data/ folder for example provides import/export routines, and also sets up a Data class especially suited for machine learning tasks: subsets (e.g., for cross-validation) are lazy copies of the original set.
  • The folders Rng/` and Statistics/ implement specialized functionality for random number generation, and various statistical tests or distributions, respectively.
  • Currently, the only algorithms implemented in the folder Unsupervised/ are Restricted Boltzmann machines, but this will be expanded in the future.
  • Finally, one of the most important design aspects of Shark is the "Model"-"ObjectiveFunction"-"Optimizer" trias. This can be seen as roughly corresponding to the three remaining folders Models/, ObjectiveFunctions/, and Algorithms/