今回は機械学習HTMの動きをわかりやすくするためにシナプスを3D描画してみました。
目的
HTMのシナプスを3D描画する
実験方法
使用するもの
・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]
[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描画でプロットして動画のようにして見てみたいと思います!