(HTM)层次时序记忆-空间沉积池实现解读
如果你对HTM感兴趣,我建立了一个群,我们共同学习交流。515743445。
阅读本文前建议先阅读HTM白皮书(需要了解sp和tm的工作步骤),以及论文The HTM Spatial Pooler-A Neocortical Algorithm for Online Sparse Distributed Coding
本文研究src/nupic/algorithms/spatial_pooler.py的代码实现
我们以Complete-algo-example.py为实例对其进行研究。该范例的数据来自gymdata.csv。这是一个关于不同时间consumption数据的文件。其日期部分使用DateEncoder转换为SDR,其consumption部分使用RandomDistributedScalarEncoder转换为SDR。合并后输入sp。该范例的参数存放在model.yaml中。需要注意,该文件中SDRClassifierFactory.create()可能由于配置问题存在错误,我们直接使用python实现的SDRClassifier。另外其使用的tm与opf中使用的是不同的版本,导致结果不同。
SpatialPooler主要包括两个方法。init方法接收入参,构造sp。compute方法接收一个sdr,并计算激活的列。(这里的列指圆柱区域)
Sp的一些重要入参包括:
InputDimensions=(946,),一维,输入sdr的大小。默认(32,32)是二维的。
ColumnDimensions=(2048,),一维,输出sdr的大小,默认(64,64)是二维的。
PotentialRadius=16.指每一个列,可以建立前馈输入的范围(半径)。其实际效果是,每一个圆柱的潜在输入,在其与输入sdr的对应输入位的一定范围内。
PotentialPct=0.85 潜在突触范围内,85%是潜在输入。
GlobalInhibition=1使用全局抑制
lacalAreaDensity=-1.0 抑制范围内活跃列的密度,不启用