Note: Numenta reserves certain patent rights. See Intellectual Property for details.
This project is an unofficial implementation of the Cortical Learning Algorithms version of HTM, as described in v0.2 of the writeup. Ultimately, pyHTM will demonstrate learning and categorization of various sensory inputs, and display the results.
This implementation will favor code readability over optimization when those options are mutually exclusive. If you want to understand what's going on, just dig into carver/htm_main.py and trace the code (using the Numenta paper as a reference).
The project is very young, and still remains unproven in terms of correctness. I welcome bug reports, forks and pull requests.
- Near Term
- Build diagnostic UI tools to show network state
- Confirm correctness of algorithm (as defined by Numenta) <-- currently
- Medium Term
- Build showcase of effectiveness on both trivial and real-world data
- Serialize network state to disk to pause & continue
- Long Term
- Build UI to configure and run HTM networks
- Optimize for speed, never sacrificing code readability.
Feb 1: Added test for recognition of 4 static images (does not yet pass all tests) @see src/carver/tests/recognition_static.py
Jan 19: Basic HTM network history readout implemented in htm_main (shows in console)
Dec 10: The most basic correctness tests are passing!
- after short training, repeated incidents of the same data "light up" the same columns
- particular cells within the column become active after learning temporal patterns
Numenta encourages non-commercial experimentation: "Numenta promises that it will not assert its current patent rights against development or use of independent HTM systems, as long as such development or use is for research purposes only, and not for any commercial or production use."
In fact the license I'm using on this project is also non-commercial, so if you want a commercial license, you'll have to work it out with both Numenta and myself.
A section of this code, found in the numenta package, is a direct translation from the pseudocode in their writeup. Despite pretty significant changes in the translation to python, I am assuming the Numenta copyright still holds (I only have a basic understanding of copyright law). The rest of the implementation is in the carver.htm package, and is licensed under the Numenta Non-commercial License; see license.txt for details.