A lightweight C library for building and training small to medium artificial neural networks with minimal dependencies.
KANN is a lightweight C library for building and training small to medium artificial neural networks, including MLPs, CNNs, and RNNs. It implements graph-based automatic differentiation to create flexible models with features like weight sharing and multiple outputs. The library solves the need for a portable, dependency-free neural network toolkit in C/C++ environments.
Developers working in C/C++ who need to experiment with or deploy small to medium neural networks without external dependencies, or those wanting to learn deep learning library internals.
KANN offers a unique combination of flexibility and minimalism—it supports complex neural architectures while being under 4000 lines of code with no non-standard dependencies. It's faster than other lightweight frameworks and is ideal for CPU-only scenarios where portability and simplicity are critical.
A lightweight C library for artificial neural networks
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports building computational graphs with operators for RNNs, weight sharing, and multiple inputs/outputs, enabling non-standard neural topologies as noted in the introduction.
Optimized matrix operations and multi-threading make it faster than lightweight frameworks like tiny-dnn on CPU, with benchmarks showing competitive speeds against Theano in single-thread mode.
Under 4000 lines of code with no non-standard dependencies, making it highly portable and easy to integrate into C projects without external libraries.
Provides a clear implementation of graph-based automatic differentiation, ideal for developers wanting to learn deep learning library internals, as mentioned in the philosophy.
Lacks common neural network components like batch normalization, limiting the implementation of state-of-the-art architectures, as admitted in the limitations section.
Training RNNs requires using complex, low-level APIs that are less user-friendly compared to higher-level frameworks, making model development more tedious.
CPU-only design restricts scalability and performance for large networks, and the multi-threading model doesn't align well with GPU usage, as noted in benchmarks.