This was the route I took. I’m still in the process of creating my own application of the algorithms (not going into detail of that). I wrote my implementation of the algorithms from scratch in C++ in a Linux VM and compiled them into one shared library object that I am designing as a sort of “libhtm” interface for the application. I definitely did more than reimplement the underlying learning algorithms of NuPIC; probably more along the lines of reimplementing NuPIC itself. But I figured this was the easiest and most beneficial way for me to integrate an HTM library into my own application and truly learn the algorithms themselves.
There have been two main problems for me. The first is actually testing my implementation along different points of development and determining how well it works. I had to develop a UI and all for visualizing the algorithms and tests. The second is trying to figure out exactly the right way to go about the implementation for optimization and simplicity. I ended up refactoring the entire project once or two. But that is bound to happen with a development team of one. NuPIC has many, many hacks within it and for good reason. I had to rediscover the hacks myself, and probably my own unique ones. I don’t regret recreating it all from scratch one bit. I feel like I would get the sense that there was something I am missing if I just tried to improve or enhance someone else’s work. If you would rather not spend a considerable amount of time building your own foundation, then maybe reconsider doing what I did. Suid From: nupic [mailto:[email protected]] On Behalf Of Jeff Fohl Sent: Thursday, April 16, 2015 12:27 PM To: Dillon Bender Subject: How best to learn HTM algorithms by implementing them? I am interested in learning the HTM algorithms at a deeper level by writing my own implementation. The language I am currently work with most frequently is Javascript, so I was planning on doing my implementation in that language. My question for those who have gone this route already is: if the primary goal of the exercise is a deeper understanding of the algorithms, is it best to start from scratch, implementing the pseudocode as described in the white paper, or is porting an existing implementation - such as htm.java more fruitful? - Jeff
