(HTM)nupic概览
层次时序记忆是numenta公司发布的一种人工智能算法,发布为nupic项目。
本文为nupic代码实现的研究笔记。
如果你对HTM感兴趣,我建立了一个群,我们共同学习交流。515743445。
阅读本文前请先阅读HTM白皮书,以对HTM理论有一个基本的了解。
Nupic的主要内容在src/nupic中
- 获取nupic文档:
在docs文件夹下的README.md文件中,nupic写明了生成nupic文档的两种方式
## Usage
* Install `nupic` in dev mode: `python setup.py develop –user`
* Install dev dependencies: `pip install -r requirements-dev.txt –user`
* Build the docs by running: `make html`
* Or instead, to build the docs and watch for changes in the code and `.rst` files, run:
“`
sphinx-autobuild ${NUPIC}/docs/source ${NUPIC}/docs/_build_html \
–watch ${NUPIC}/src –poll –open-browser
“`
使用该方法会生成一个build文件夹。打开该文件夹下的index.html.
- Nupic在逻辑上主要由三部分构成。分别是底层的algorithm api,中间的network api和高层的online prediction framework
文档提供了三种api的入门范例。
algorithm api的入门范例是docs/example/algo/complete-algo-example.py
该文件的逻辑顺序是:
- 使用encoder将data转化为sdr
- 使用sp提取sdr的模式表征
- 使用tm获得当前输入在上下文中的表示
- 使用一个分类器将tm的输出对应到输入
Network提供了一个网络层的api,主要方法是添加sp,tm,encoder,classifier等region,并使用link方法连接,最后使用run方法训练网络。
Opf抽象出一个model,直接使用model提供的方法进行训练。主要是create model ,feed data ,extract result 三个步骤。
- 在examples中,提供了三类api的使用范例,以及对sp,tm的测试。
- 在src/nupic/encoders中实现了一些编码器,将特定类型的输入编码为sdr,其核心方法是encodeIntoArray,以及供分类器使用的getBucketIndices和getBucketValues方法。主要包括标量,日期,坐标,类别等。
- Sdr_classifier分类器是一个单层的神经网络,将输入模式映射到类标签。
- Nupic提供了对sp,tm,network等进行序列化的方法。
- 部分核心、耗时方法在nupic.core中,使用c++实现