TMの実装方法

TM tutorial

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

基本的な実装方法は、SPで出力されたアクティブなSDRを入力します。SPの出力とTMの入力の次元は一致しなければなりません。

python3
from htm.bindings.sdr import SDR
from htm.algorithms import TemporalMemory as TM

activeSDR = SDR( dimensions = (50,) )
tm = TM(columnDimensions = activeSDR.dense.shape,
        cellsPerColumn=1,
        initialPermanence=0.5,
        connectedPermanence=0.5,
        minThreshold=8,
        maxNewSynapseCount=20,
        permanenceIncrement=0.1,
        permanenceDecrement=0.0,
        activationThreshold=8,
        )

入力データとして、ここでは仮にA・B・C・D・E を表すSDRを生成します。オンビット10で5つのカテゴリーなので、SDRのサイズは50ビットになります。

python3
dataset = { inp : SDR( tm.numberOfColumns() ) for inp in "ABCDE" }

dataset['A'].dense[0:10]  = 1 
dataset['B'].dense[10:20] = 1 
dataset['C'].dense[20:30] = 1
dataset['D'].dense[30:40] = 1 
dataset['E'].dense[40:50] = 1 

for z in dataset.values():
  z.dense = z.dense
for inp in "ABCDE":
  print("Input:", inp, " Bits:", dataset[inp] )

入力の各SDRは以下のようになります。

続いて、tm.compute() メソッドを使って時間プーラーを使って学習・予測をおこないます。

for ループをつかい、各SDRを1回づつ入力します。

TMはセル間の結びつきを学習・予測するため、SDRの出力はありません。予測セルを出力するには2つのメソッドが必要となります。

tm.activateDendrites()でアクティブな接続を呼び出し、tm.getPredictiveCells() で予測セルを取得します。

1回目の予測セルを確認してみましょう。

時間プーラーの学習では、ミニカラムがはじめてのデータを参照する際、それらは予測にないためバースト(Burst)が発生します。つまり、ミニカラムのすべてのセルがそのシーケンスを学習しようとします。

そのため予測がおこなわれていないことに注目してください。もう一度同じデータを入力します。

2回目の予測セルを確認してみましょう。

1回目の入力データをもとに予測がおこなわれていることが分かります。

接続状況の確認

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

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

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

シナプスの数値変化に注目してください。

最終更新