def testActivateCorrectlyPredictiveCells(self): tm = TemporalMemory() prevPredictiveCells = set([tm.layer.columns[0].cells[0], tm.layer.columns[7].cells[13], tm.layer.columns[32].cells[2], tm.layer.columns[823].cells[1], tm.layer.columns[823].cells[3], tm.layer.columns[1735].cells[16]]) activeColumns = set([tm.layer.columns[32], tm.layer.columns[47], tm.layer.columns[823]]) prevMatchingCells = set() (activeCells, winnerCells, predictedColumns, predictedInactiveCells) = tm.activateCorrectlyPredictiveCells(prevPredictiveCells, prevMatchingCells, activeColumns) self.assertEqual(activeCells, set([tm.layer.columns[32].cells[2], tm.layer.columns[823].cells[1], tm.layer.columns[823].cells[3]])) self.assertEqual(winnerCells, set([tm.layer.columns[32].cells[2], tm.layer.columns[823].cells[1], tm.layer.columns[823].cells[3]])) self.assertEqual(predictedColumns, set([tm.layer.columns[32], tm.layer.columns[823]])) self.assertEqual(predictedInactiveCells, set())
def testBurstColumns(self): tm = TemporalMemory( layer=Layer(numCellsPerColumn=4), connectedPermanence=0.50, minThreshold=1, seed=42 ) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[5].cells[3], permanence=0.6) segment1.createSynapse(presynapticCell=tm.layer.columns[9].cells[1], permanence=0.4) segment1.createSynapse(presynapticCell=tm.layer.columns[119].cells[1], permanence=0.9) segment2 = tm.layer.columns[0].cells[0].createSegment() segment2.createSynapse(presynapticCell=tm.layer.columns[12].cells[1], permanence=0.9) segment2.createSynapse(presynapticCell=tm.layer.columns[0].cells[3], permanence=0.8) segment3 = tm.layer.columns[0].cells[1].createSegment() segment3.createSynapse(presynapticCell=tm.layer.columns[183].cells[1], permanence=0.7) segment4 = tm.layer.columns[27].cells[0].createSegment() segment4.createSynapse(presynapticCell=tm.layer.columns[121].cells[2], permanence=0.9) activeColumns = set([tm.layer.columns[0], tm.layer.columns[1], tm.layer.columns[26]]) predictedColumns = set([tm.layer.columns[26]]) prevActiveCells = set([tm.layer.columns[5].cells[3], tm.layer.columns[9].cells[1], tm.layer.columns[12].cells[1], tm.layer.columns[183].cells[1]]) prevWinnerCells = set([tm.layer.columns[5].cells[3], tm.layer.columns[9].cells[1], tm.layer.columns[12].cells[1], tm.layer.columns[183].cells[1]]) (activeCells, winnerCells, learningSegments) = tm.burstColumns(activeColumns, predictedColumns, prevActiveCells, prevWinnerCells) # 5 is the new segment was added to winner cell (6) in column 1 segment5 = list(tm.layer.columns[1].cells[2].segments)[0] self.assertEqual(activeCells, set([tm.layer.columns[0].cells[0], tm.layer.columns[0].cells[1], tm.layer.columns[0].cells[2], tm.layer.columns[0].cells[3], tm.layer.columns[1].cells[0], tm.layer.columns[1].cells[1], tm.layer.columns[1].cells[2], tm.layer.columns[1].cells[3]])) self.assertEqual(winnerCells, set([tm.layer.columns[0].cells[0], tm.layer.columns[1].cells[2]])) # 6 is randomly chosen cell self.assertEqual(learningSegments, set([segment1, segment5]))
def testPickCellsToLearnOnAvoidDuplicates(self): tm = TemporalMemory(seed=42) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.6) winnerCells = set([tm.layer.columns[0].cells[23]]) # Ensure that no additional (duplicate) cells were picked self.assertEqual(tm.pickCellsToLearnOn(2, segment1, winnerCells), set())
def testAdaptSegmentToMin(self): tm = TemporalMemory() segment1 = tm.layer.columns[0].cells[0].createSegment() synapse1 = segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.1) tm.adaptSegment(segment1, set(), tm.permanenceIncrement, tm.permanenceDecrement) synapses = segment1.synapses self.assertFalse(synapse1 in synapses)
def testLearnOnSegments(self): tm = TemporalMemory(maxNewSynapseCount=2) segment1 = tm.layer.columns[0].cells[0].createSegment() synapse1 = segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.6) synapse2 = segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[5], permanence=0.4) synapse3 = segment1.createSynapse(presynapticCell=tm.layer.columns[14].cells[29], permanence=0.9) segment2 = tm.layer.columns[0].cells[1].createSegment() synapse4 = segment2.createSynapse(presynapticCell=tm.layer.columns[22].cells[29], permanence=0.7) segment3 = tm.layer.columns[0].cells[8].createSegment() synapse5 = segment3.createSynapse(presynapticCell=tm.layer.columns[15].cells[6], permanence=0.9) segment4 = tm.layer.columns[3].cells[4].createSegment() prevActiveSegments = set([segment1, segment3]) learningSegments = set([segment2, segment4]) prevActiveCells = set([tm.layer.columns[0].cells[23], tm.layer.columns[1].cells[5], tm.layer.columns[22].cells[29]]) winnerCells = set([tm.layer.columns[0].cells[0]]) prevWinnerCells = set([tm.layer.columns[0].cells[10], tm.layer.columns[0].cells[11], tm.layer.columns[0].cells[12], tm.layer.columns[0].cells[13], tm.layer.columns[0].cells[14]]) predictedInactiveCells = set() prevMatchingSegments = set() tm.learnOnSegments(prevActiveSegments, learningSegments, prevActiveCells, winnerCells, prevWinnerCells, predictedInactiveCells, prevMatchingSegments) # Check segment 1 self.assertAlmostEqual(synapse1.permanence, 0.7) self.assertAlmostEqual(synapse2.permanence, 0.5) self.assertAlmostEqual(synapse3.permanence, 0.8) # Check segment 2 self.assertAlmostEqual(synapse4.permanence, 0.8) self.assertEqual(len(segment2.synapses), 2) # Check segment 3 self.assertAlmostEqual(synapse5.permanence, 0.9) self.assertEqual(len(segment3.synapses), 1) # Check segment 4 self.assertEqual(len(segment4.synapses), 2)
def testLeastUsedCell(self): tm = TemporalMemory( layer=Layer(columnDimensions=[2], numCellsPerColumn=2), seed=42 ) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[1], permanence=0.3) for _ in range(100): # Never pick cell 0, always pick cell 1 self.assertEqual(tm.leastUsedCell(tm.layer.columns[0].cells), tm.layer.columns[0].cells[1])
def testAdaptSegmentToMax(self): tm = TemporalMemory() segment1 = tm.layer.columns[0].cells[0].createSegment() synapse1 = segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.9) tm.adaptSegment(segment1, set([synapse1]), tm.permanenceIncrement, tm.permanenceDecrement) self.assertAlmostEqual(synapse1.permanence, 1.0) # Now permanence should be at max tm.adaptSegment(segment1, set([synapse1]), tm.permanenceIncrement, tm.permanenceDecrement) self.assertAlmostEqual(synapse1.permanence, 1.0)
def testAdaptSegment(self): tm = TemporalMemory( layer=Layer(columnDimensions=[2048], numCellsPerColumn=32) ) segment1 = tm.layer.columns[0].cells[0].createSegment() synapse1 = segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.6) synapse2 = segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[5], permanence=0.4) synapse3 = segment1.createSynapse(presynapticCell=tm.layer.columns[14].cells[29], permanence=0.9) tm.adaptSegment(segment1, set([synapse1, synapse2]), tm.permanenceIncrement, tm.permanenceDecrement) self.assertAlmostEqual(synapse1.permanence, 0.7) self.assertAlmostEqual(synapse2.permanence, 0.5) self.assertAlmostEqual(synapse3.permanence, 0.8)
def testBestMatchingCellFewestSegments(self): tm = TemporalMemory( layer=Layer(columnDimensions=[2], numCellsPerColumn=2), connectedPermanence=0.50, minThreshold=1, seed=42 ) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[1], permanence=0.3) activeSynapsesForSegment = set([]) for _ in range(100): # Never pick cell 0, always pick cell 1 (cell, _) = tm.bestMatchingCell(tm.layer.columns[0].cells, activeSynapsesForSegment) self.assertEqual(cell, tm.layer.columns[0].cells[1])
def testBurstColumnsEmpty(self): tm = TemporalMemory() activeColumns = set() predictedColumns = set() prevActiveCells = set() prevWinnerCells = set() (activeCells, winnerCells, learningSegments) = tm.burstColumns(activeColumns, predictedColumns, prevActiveCells, prevWinnerCells) self.assertEqual(activeCells, set()) self.assertEqual(winnerCells, set()) self.assertEqual(learningSegments, set())
def testBestMatchingSegment(self): tm = TemporalMemory( layer=Layer(columnDimensions=[2048], numCellsPerColumn=32), connectedPermanence=0.50, minThreshold=1 ) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.6) segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[5], permanence=0.4) segment1.createSynapse(presynapticCell=tm.layer.columns[14].cells[29], permanence=0.9) segment2 = tm.layer.columns[0].cells[0].createSegment() segment2.createSynapse(presynapticCell=tm.layer.columns[1].cells[17], permanence=0.9) segment2.createSynapse(presynapticCell=tm.layer.columns[0].cells[3], permanence=0.8) segment3 = tm.layer.columns[0].cells[1].createSegment() segment3.createSynapse(presynapticCell=tm.layer.columns[22].cells[29], permanence=0.7) segment4 = tm.layer.columns[0].cells[8].createSegment() segment4.createSynapse(presynapticCell=tm.layer.columns[15].cells[6], permanence=0.9) activeCells = set([tm.layer.columns[0].cells[23], tm.layer.columns[1].cells[5], tm.layer.columns[1].cells[17], tm.layer.columns[22].cells[29]]) self.assertEqual(tm.bestMatchingSegment(tm.layer.columns[0].cells[0], activeCells), (segment1, 2)) self.assertEqual(tm.bestMatchingSegment(tm.layer.columns[0].cells[1], activeCells), (segment3, 1)) self.assertEqual(tm.bestMatchingSegment(tm.layer.columns[0].cells[8], activeCells), (None, None)) self.assertEqual(tm.bestMatchingSegment(tm.layer.columns[3].cells[4], activeCells), (None, None))
def testPickCellsToLearnOn(self): tm = TemporalMemory(seed=42) segment1 = tm.layer.columns[0].cells[0].createSegment() winnerCells = set([tm.layer.columns[0].cells[4], tm.layer.columns[1].cells[15], tm.layer.columns[1].cells[26], tm.layer.columns[2].cells[29]]) self.assertEqual(tm.pickCellsToLearnOn(2, segment1, winnerCells), set([tm.layer.columns[0].cells[4], tm.layer.columns[1].cells[26]])) # randomly picked self.assertEqual(tm.pickCellsToLearnOn(100, segment1, winnerCells), set([tm.layer.columns[0].cells[4], tm.layer.columns[1].cells[15], tm.layer.columns[1].cells[26], tm.layer.columns[2].cells[29]])) self.assertEqual(tm.pickCellsToLearnOn(0, segment1, winnerCells), set())
def testBestMatchingCell(self): tm = TemporalMemory( connectedPermanence=0.50, minThreshold=1, seed=42 ) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.6) segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[5], permanence=0.4) segment1.createSynapse(presynapticCell=tm.layer.columns[14].cells[29], permanence=0.9) segment2 = tm.layer.columns[0].cells[0].createSegment() segment2.createSynapse(presynapticCell=tm.layer.columns[1].cells[17], permanence=0.9) segment2.createSynapse(presynapticCell=tm.layer.columns[0].cells[3], permanence=0.8) segment3 = tm.layer.columns[0].cells[1].createSegment() segment3.createSynapse(presynapticCell=tm.layer.columns[22].cells[29], permanence=0.7) segment4 = tm.layer.columns[3].cells[12].createSegment() segment4.createSynapse(presynapticCell=tm.layer.columns[15].cells[6], permanence=0.9) activeCells = set([tm.layer.columns[0].cells[23], tm.layer.columns[1].cells[5], tm.layer.columns[1].cells[17], tm.layer.columns[22].cells[29]]) self.assertEqual(tm.bestMatchingCell(tm.layer.columns[0].cells, activeCells), (tm.layer.columns[0].cells[0], segment1)) self.assertEqual(tm.bestMatchingCell(tm.layer.columns[3].cells, # column containing cell 108 activeCells), (tm.layer.columns[3].cells[20], None)) # Random cell from column self.assertEqual(tm.bestMatchingCell(tm.layer.columns[999].cells, activeCells), (tm.layer.columns[999].cells[19], None)) # Random cell from column
def testComputePredictiveCells(self): tm = TemporalMemory( layer=Layer(columnDimensions=[2048], numCellsPerColumn=32), activationThreshold=2, minThreshold=2, predictedSegmentDecrement=0.004) segment1 = tm.layer.columns[0].cells[0].createSegment() segment1.createSynapse(presynapticCell=tm.layer.columns[0].cells[23], permanence=0.6) segment1.createSynapse(presynapticCell=tm.layer.columns[1].cells[5], permanence=0.5) segment1.createSynapse(presynapticCell=tm.layer.columns[14].cells[29], permanence=0.9) segment2 = tm.layer.columns[0].cells[1].createSegment() segment2.createSynapse(presynapticCell=tm.layer.columns[22].cells[29], permanence=0.7) segment2.createSynapse(presynapticCell=tm.layer.columns[22].cells[29], permanence=0.4) segment3 = tm.layer.columns[0].cells[1].createSegment() segment3.createSynapse(presynapticCell=tm.layer.columns[30].cells[14], permanence=0.9) segment4 = tm.layer.columns[0].cells[8].createSegment() segment4.createSynapse(presynapticCell=tm.layer.columns[15].cells[6], permanence=0.9) segment5 = tm.layer.columns[3].cells[4].createSegment() activeCells = set([tm.layer.columns[0].cells[23], tm.layer.columns[1].cells[5], tm.layer.columns[22].cells[29], tm.layer.columns[30].cells[14]]) (activeSegments, predictiveCells, matchingSegments, matchingCells) = tm.computePredictiveCells(activeCells) self.assertEqual(activeSegments, set([segment1])) self.assertEqual(predictiveCells, set([tm.layer.columns[0].cells[0]])) self.assertEqual(matchingSegments, set([segment1, segment2])) self.assertEqual(matchingCells, set([tm.layer.columns[0].cells[0], tm.layer.columns[0].cells[1]]))
def testActivateCorrectlyPredictiveCellsOrphan(self): tm = TemporalMemory() tm.predictedSegmentDecrement = 0.001 prevPredictiveCells = set([]) activeColumns = set([tm.layer.columns[32], tm.layer.columns[47], tm.layer.columns[823]]) prevMatchingCells = set([tm.layer.columns[1].cells[0], tm.layer.columns[1].cells[15]]) (activeCells, winnerCells, predictedColumns, predictedInactiveCells) = tm.activateCorrectlyPredictiveCells(prevPredictiveCells, prevMatchingCells, activeColumns) self.assertEqual(activeCells, set([])) self.assertEqual(winnerCells, set([])) self.assertEqual(predictedColumns, set([])) self.assertEqual(predictedInactiveCells, set([tm.layer.columns[1].cells[0], tm.layer.columns[1].cells[15]]))