人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

global navigation menu page top

HTMのシナプスをmatplotlibで3D描画!(散布図)〜データを可視化してみよう!〜

今回は機械学習HTMの動きをわかりやすくするためにシナプスを3D描画してみました。

 

目的

HTMのシナプスを3D描画する

 

実験方法

使用するもの

python

・matplotlib

・nupic(HTMのモジュール)

 

実験の流れ

・学習前の初期シナプスを3D描画する

・活性化しているシナプスは赤でしていないシナプスは青で描画する

 

 

では、実験開始です!

 

ソースコード 


import numpy
from nupic.encoders.category import CategoryEncoder
from nupic.algorithms.spatial_pooler import SpatialPooler
categories = ("cat", "dog", "monkey", "slow loris")
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import sys

def plot3D(data):
    #3D描画のための宣言
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')

    #活性化していないシナプスを格納する配列
    x2 = []
    y2 = []
    z2 = []
#活性化しているシナプスを格納する配列 x3= [] y3 = [] z3 = [] for i in range(len(data)/5): for j in range(5): if data[5*i+j] == 1: x2.append(j+1) y2.append(i+1) z2.append(5) else: x3.append(j+1) y3.append(i+1) z3.append(5) #3d描画 ax.scatter(x3, y3, z3) ax.scatter(x2, y2, z2, c="red") plt.show() sp = SpatialPooler(inputDimensions=(15,), columnDimensions=(4,), potentialRadius=15, numActiveColumnsPerInhArea=1, globalInhibition=True, synPermActiveInc=0.03, potentialPct=1.0) print "------------"*4 for column in xrange(4): connected = numpy.zeros((15,), dtype="int") sp.getConnectedSynapses(column, connected) print connected plot3D(connected) sys.exit()

 出力結果

初期シナプス

[0 1 1 1 1 0 0 1 0 1 1 0 0 1 1]

[0 0 1 0 0 0 1 1 1 0 1 1 1 1 0]

[0 1 0 1 0 0 0 0 1 0 1 0 1 0 0]

[0 0 0 0 1 0 1 0 1 0 1 1 0 1 0]

 

3D 描画

[0 1 1 1 1 0 0 1 0 1 1 0 0 1 1]

f:id:hiro-htm877:20190209223604p:plain

 

[0 0 1 0 0 0 1 1 1 0 1 1 1 1 0]

f:id:hiro-htm877:20190209223633p:plain

 

[0 1 0 1 0 0 0 0 1 0 1 0 1 0 0]

f:id:hiro-htm877:20190209223656p:plain

 

[0 0 0 0 1 0 1 0 1 0 1 1 0 1 0]

f:id:hiro-htm877:20190209223726p:plain

 

今回の実験はここで終わりです。

このようにデータを可視化することで、考察なども行いやすいため、研究やシステム開発が捗ります。

次回は、学習の過程を3D描画でプロットして動画のようにして見てみたいと思います!