SPの実装方法

SP Tutorial

まずは、SPの実装方法をためします。ライブラリを読み込み、パラメータを指定し、SDRのデータ構造を作成します。

python3
from htm.bindings.sdr import SDR
from htm.algorithms import SpatialPooler as SP

inputSDR  = SDR( dimensions = (32, 32) )
activeSDR = SDR( dimensions = (64, 64) )
sp = SP(inputDimensions  = inputSDR.dimensions,
        columnDimensions = activeSDR.dimensions,
        localAreaDensity = 0.02,
        globalInhibition = True,
        seed             = 1,
        synPermActiveInc   = 0.01,
        synPermInactiveDec = 0.008)

続いて、SDRへエンコードしたデータを入力し、sp.compute() メソッドを使って空間プーラーへ変換します。

ここでは、sdr.randomize() メソッドをつかいランダムなSDRを生成します。

htm.coreの計算処理は、コア部分をのぞきPythonとNumpyでおこないます。ここではfor ループをつかい3回入力します。

python3
for i in range(3):
    inputSDR.randomize( .02 )
    sp.compute(inputSDR, True, activeSDR)
    print("Active Outputs " + str(activeSDR))
    print("")

出力をみてみましょう。異なる入力に対し、異なる出力がされていることに注目してください。

出力されたSDRをそれぞれ可視化してみます。

図4-1
図4-2
図4-3

SPの主なつかい方は以上です。基本的に入力データを疎なSDRへ変換し、アクティブなセルをTMへ引き渡す目的で使用します。

接続状況の確認

SPは入力データをもとに、セグメントを通じてシナプスの接続度を更新します。処理の内部情報となる入力と出力の接続状況は print() で確認することができます。

初期状態のSPは以下のような状態でした。

3回データ入力が終わったあとの内部情報を確認してみましょう。

SPは未知の入力に対し、ブースティングをおこないより多くのシナプスを活性化させようとします。シナプスの数値変化に注目してください。

最終更新