-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrecorder.py
133 lines (106 loc) · 4.16 KB
/
recorder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import numpy as np
class Store:
def __init__(self):
pass
def record(self,model,result,fieldFunctions):
for function in fieldFunctions:
fieldName = function.__name__
if not hasattr(self,fieldName):
setattr(self,fieldName,[])
field = getattr(self,fieldName)
field.append(function(model=model,result=result))
def anomalyScore(model,result):
return result.inferences['anomalyScore']
def bestPrediction(model,result):
return result.inferences['multiStepBestPredictions'][1]
def allPredictions(model,result):
return result.inferences['multiStepPredictions'][1]
def predictedColumns(model,result):
return model._prevPredictedColumns
def modelInput(model,result):
name = model.getFieldInfo()[0].name
return model._input[name]
def boostFactors(model,result):
sp = model._getSPRegion().getSelf()._sfdr
dimensions = sp.getColumnDimensions()
boostFactorsArray = np.zeros(dimensions)
sp.getBoostFactors(boostFactorsArray)
return boostFactorsArray
def activeDutyCycles(model,result):
sp = model._getSPRegion().getSelf()._sfdr
dimensions = sp.getColumnDimensions()
array = np.zeros(dimensions)
sp.getActiveDutyCycles(array)
return array
def activeCells(model,result):
tp=model._getTPRegion().getSelf()._tfdr
flatArray = tp.getActiveState()
activeCells = flatArray.reshape([tp.numberOfCols,tp.cellsPerColumn])#,dtype='int8')#same dtype as predicted state
return activeCells
def predictiveCells(model,result):
tp=model._getTPRegion().getSelf()._tfdr
array = tp.getPredictedState()
return array
def activeColumns(model,result):
"""This doesn't work"""
tp=model._getTPRegion().getSelf()._tfdr
return tp.activeColumns
def debug(model,result):
"""
This returns a random integer between 0 and 9
"""
return np.random.randint(10)
def proximalSynapses(model,result):
""""
Returns the permanences of the spatial pooler synapses.
"""
from nupic.bindings.math import GetNTAReal
realType = GetNTAReal()
sp = model._getSPRegion().getSelf()._sfdr
numColumns = sp.getNumColumns()
numInputs = sp.getNumInputs()
proximalSynapses=[]
for column in xrange(numColumns):
#Get permanence values
permanences=np.zeros(numInputs).astype(realType)
sp.getPermanence(column,permanences)
permanences=permanences.astype(float)
#Get potential synapse map
potentials = np.zeros(numInputs).astype('uint32')
sp.getPotential(column,potentials)
potentials=potentials.astype(bool)
#Put everything into a list of indexes beacuse numpy is rubbish
for i in xrange(len(permanences)):
if potentials[i]:
proximalSynapses.append([column,i,permanences[i]])
return proximalSynapses
def fastProximalPermanences(model,result):
""""
Returns the permanences of the spatial pooler synapses.
"""
from nupic.bindings.math import GetNTAReal
realType = GetNTAReal()
sp = model._getSPRegion().getSelf()._sfdr
numInputs = sp.getNumInputs()
numColumns = sp.getNumColumns()
allPermanences=[]
for column in xrange(numColumns):
permanences=np.zeros(numInputs).astype(realType)
sp.getPermanence(column,permanences)
allPermanences.append(permanences)
return np.concatenate(allPermanences)
def connectedProximalSynapseCount(model,result):
"""Returns the total number of proximal synapses that are connected."""
sp = model._getSPRegion().getSelf()._sfdr
numColumns = sp.getNumColumns()
connectedSynapsesPerColumn=np.zeros(numColumns,dtype='uint32')
sp.getConnectedCounts(connectedSynapsesPerColumn)
return np.sum(connectedSynapsesPerColumn)
def distalSynapseCount(model,result):
"""Returns the total number of synapses in the temporal memory."""
tp=model._getTPRegion().getSelf()._tfdr
return tp.getNumSynapses()
def distalSegmentCount(model,result):
"""Returns the total number of segments in the temporal memory."""
tp=model._getTPRegion().getSelf()._tfdr
return tp.getNumSegments()