示例#1
0
    def testColumnForCellInvalidCell(self):
        tm = TemporalMemory(columnDimensions=[64, 64], cellsPerColumn=4)

        try:
            tm.columnForCell(16383)
        except IndexError:
            self.fail("IndexError raised unexpectedly")

        args = [16384]
        self.assertRaises(IndexError, tm.columnForCell, *args)

        args = [-1]
        self.assertRaises(IndexError, tm.columnForCell, *args)
示例#2
0
    def testAdaptSegmentToMin(self):
        tm = TemporalMemory()

        connections = tm.connections
        connections.createSegment(0)
        connections.createSynapse(0, 23, 0.1)
        connections.createSynapse(0, 1, 0.3)

        tm.adaptSegment(connections, [], tm.permanenceIncrement,
                        tm.permanenceDecrement, 0)

        synapses = connections.synapsesForSegment(0)
        self.assertFalse(0 in synapses)
示例#3
0
    def testCellsForColumnInvalidColumn(self):
        tm = TemporalMemory(columnDimensions=[64, 64], cellsPerColumn=4)

        try:
            tm.cellsForColumn(4095)
        except IndexError:
            self.fail("IndexError raised unexpectedly")

        args = [4096]
        self.assertRaises(IndexError, tm.cellsForColumn, *args)

        args = [-1]
        self.assertRaises(IndexError, tm.cellsForColumn, *args)
示例#4
0
    def testNoChangeToMatchingSegmentsInPredictedActiveColumn(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.21,
                            connectedPermanence=.50,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=.10,
                            permanenceDecrement=.10,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        previousActiveColumns = [0]
        activeColumns = [1]
        previousActiveCells = [0, 1, 2, 3]
        expectedActiveCells = [4]
        otherburstingCells = [5, 6, 7]

        activeSegment = tm.connections.createSegment(expectedActiveCells[0])
        tm.connections.createSynapse(activeSegment, previousActiveCells[0], .5)
        tm.connections.createSynapse(activeSegment, previousActiveCells[1], .5)
        tm.connections.createSynapse(activeSegment, previousActiveCells[2], .5)
        tm.connections.createSynapse(activeSegment, previousActiveCells[3], .5)

        matchingSegmentOnSameCell = tm.connections.createSegment(
            expectedActiveCells[0])
        s1 = tm.connections.createSynapse(matchingSegmentOnSameCell,
                                          previousActiveCells[0], .3)
        s2 = tm.connections.createSynapse(matchingSegmentOnSameCell,
                                          previousActiveCells[1], .3)

        matchingSegmentOnOtherCell = tm.connections.createSegment(
            otherburstingCells[0])
        s3 = tm.connections.createSynapse(matchingSegmentOnOtherCell,
                                          previousActiveCells[0], .3)
        s4 = tm.connections.createSynapse(matchingSegmentOnOtherCell,
                                          previousActiveCells[1], .3)

        tm.compute(previousActiveColumns, True)
        self.assertEqual(expectedActiveCells, tm.getPredictiveCells())
        tm.compute(activeColumns, True)

        self.assertAlmostEqual(.3,
                               tm.connections.dataForSynapse(s1).permanence)
        self.assertAlmostEqual(.3,
                               tm.connections.dataForSynapse(s2).permanence)
        self.assertAlmostEqual(.3,
                               tm.connections.dataForSynapse(s3).permanence)
        self.assertAlmostEqual(.3,
                               tm.connections.dataForSynapse(s4).permanence)
示例#5
0
  def testWrite(self):
    tm1 = TemporalMemory(
      columnDimensions=[100],
      cellsPerColumn=4,
      activationThreshold=7,
      initialPermanence=0.37,
      connectedPermanence=0.58,
      minThreshold=4,
      maxNewSynapseCount=18,
      permanenceIncrement=0.23,
      permanenceDecrement=0.08,
      seed=91
    )

    # Run some data through before serializing
    self.patternMachine = PatternMachine(100, 4)
    self.sequenceMachine = SequenceMachine(self.patternMachine)
    sequence = self.sequenceMachine.generateFromNumbers(range(5))
    for _ in range(3):
      for pattern in sequence:
        tm1.compute(pattern)

    proto1 = TemporalMemoryProto_capnp.TemporalMemoryProto.new_message()
    tm1.write(proto1)

    # Write the proto to a temp file and read it back into a new proto
    with tempfile.TemporaryFile() as f:
      proto1.write(f)
      f.seek(0)
      proto2 = TemporalMemoryProto_capnp.TemporalMemoryProto.read(f)

    # Load the deserialized proto
    tm2 = TemporalMemory.read(proto2)

    # Check that the two temporal memory objects have the same attributes
    self.assertEqual(tm1, tm2)

    # Run a couple records through after deserializing and check results match
    tm1.compute(self.patternMachine.get(0))
    tm2.compute(self.patternMachine.get(0))
    self.assertEqual(tm1.activeCells, tm2.activeCells)
    self.assertEqual(tm1.predictiveCells, tm2.predictiveCells)
    self.assertEqual(tm1.winnerCells, tm2.winnerCells)
    self.assertEqual(tm1.connections, tm2.connections)

    tm1.compute(self.patternMachine.get(3))
    tm2.compute(self.patternMachine.get(3))
    self.assertEqual(tm1.activeCells, tm2.activeCells)
    self.assertEqual(tm1.predictiveCells, tm2.predictiveCells)
    self.assertEqual(tm1.winnerCells, tm2.winnerCells)
    self.assertEqual(tm1.connections, tm2.connections)
示例#6
0
    def testLearnOnSegments(self):
        tm = TemporalMemory(maxNewSynapseCount=2)

        connections = tm.connections
        connections.createSegment(0)
        connections.createSynapse(0, 23, 0.6)
        connections.createSynapse(0, 37, 0.4)
        connections.createSynapse(0, 477, 0.9)

        connections.createSegment(1)
        connections.createSynapse(1, 733, 0.7)

        connections.createSegment(8)
        connections.createSynapse(2, 486, 0.9)

        connections.createSegment(100)

        prevActiveSegments = set([0, 2])
        learningSegments = set([1, 3])
        prevActiveCells = set([23, 37, 733])
        winnerCells = set([0])
        prevWinnerCells = set([10, 11, 12, 13, 14])

        tm.learnOnSegments(prevActiveSegments, learningSegments,
                           prevActiveCells, winnerCells, prevWinnerCells,
                           connections)

        # Check segment 0
        (_, _, permanence) = connections.dataForSynapse(0)
        self.assertAlmostEqual(permanence, 0.7)

        (_, _, permanence) = connections.dataForSynapse(1)
        self.assertAlmostEqual(permanence, 0.5)

        (_, _, permanence) = connections.dataForSynapse(2)
        self.assertAlmostEqual(permanence, 0.8)

        # Check segment 1
        (_, _, permanence) = connections.dataForSynapse(3)
        self.assertAlmostEqual(permanence, 0.8)

        self.assertEqual(len(connections.synapsesForSegment(1)), 2)

        # Check segment 2
        (_, _, permanence) = connections.dataForSynapse(4)
        self.assertAlmostEqual(permanence, 0.9)

        self.assertEqual(len(connections.synapsesForSegment(2)), 1)

        # Check segment 3
        self.assertEqual(len(connections.synapsesForSegment(3)), 2)
示例#7
0
    def initModules(self, categories, inputIdx):

        modulesNames = {
            'wordSP', 'wordTM', 'actionSP', 'actionTM', 'generalTM'
        }

        if (self.modulesParams is not None) and\
                (set(self.modulesParams) == modulesNames):
            self.modulesParams['wordSP'].update(self.defaultWordSPParams)
            self.modulesParams['wordTM'].update(self.defaultWordTMParams)
            self.modulesParams['actionSP'].update(self.defaultActionSPParams)
            self.modulesParams['actionTM'].update(self.defaultActionTMParams)

            self.wordSP = SpatialPooler(**self.modulesParams['wordSP'])
            self.wordTM = TemporalMemory(**self.modulesParams['wordTM'])
            self.actionSP = SpatialPooler(**self.modulesParams['actionSP'])
            self.actionTM = TemporalMemory(**self.modulesParams['actionTM'])

            defaultGeneralTMParams = {
                'columnDimensions': (2,
                                     max(self.wordTM.numberOfCells(),
                                         self.actionTM.numberOfCells())),
                'seed':
                self.tmSeed
            }

            self.modulesParams['generalTM'].update(defaultGeneralTMParams)

            self.generalTM = TemporalMemory(**self.modulesParams['generalTM'])
            print("Using external Parameters!")

        else:
            self.wordSP = SpatialPooler(**self.defaultWordSPParams)
            self.wordTM = TemporalMemory(**self.defaultWordTMParams)
            self.actionSP = SpatialPooler(**self.defaultActionSPParams)
            self.actionTM = TemporalMemory(**self.defaultActionTMParams)
            print("External parameters invalid or not found, using"\
                " the default ones")

            defaultGeneralTMParams = {
                'columnDimensions': (2,
                                     max(self.wordTM.numberOfCells(),
                                         self.actionTM.numberOfCells())),
                'seed':
                self.tmSeed
            }

            self.generalTM = TemporalMemory(**defaultGeneralTMParams)

        self.classifier = CLAClassifierCond(steps=[1, 2, 3],
                                            alpha=0.1,
                                            actValueAlpha=0.3,
                                            verbosity=0)

        self.startPointOverlap = CommonOverlap('==',
                                               1,
                                               self.actionTM.columnDimensions,
                                               threshold=0.5)
示例#8
0
  def testLeastUsedCell(self):
    tm = TemporalMemory(
      columnDimensions=[2],
      cellsPerColumn=2,
      seed=42
    )

    connections = tm.connections
    connections.createSegment(0)
    connections.createSynapse(0, 3, 0.3)

    for _ in range(100):
      # Never pick cell 0, always pick cell 1
      self.assertEqual(tm.leastUsedCell(tm.cellsForColumn(0)), 1)
    def setUp(self):
        self.patternMachine = ConsecutivePatternMachine(100, 5)
        self.sequenceMachine = SequenceMachine(self.patternMachine)

        self.tm = TemporalMemory(columnDimensions=[100],
                                 cellsPerColumn=4,
                                 initialPermanence=0.6,
                                 connectedPermanence=0.5,
                                 minThreshold=1,
                                 maxNewSynapseCount=6,
                                 permanenceIncrement=0.1,
                                 permanenceDecrement=0.05,
                                 activationThreshold=1)

        self.tmTestMachine = TemporalMemoryTestMachine(self.tm)
示例#10
0
    def testPickCellsToLearnOn(self):
        tm = TemporalMemory(seed=42)

        connections = tm.connections
        connections.createSegment(0)

        winnerCells = set([4, 47, 58, 93])

        self.assertEqual(tm.pickCellsToLearnOn(2, 0, winnerCells),
                         set([4, 93]))  # randomly picked

        self.assertEqual(tm.pickCellsToLearnOn(100, 0, winnerCells),
                         set([4, 47, 58, 93]))

        self.assertEqual(tm.pickCellsToLearnOn(0, 0, winnerCells), set())
示例#11
0
  def testRecycleLeastRecentlyActiveSegmentToMakeRoomForNewSegment(self):
    tm = TemporalMemory(
      columnDimensions=[32],
      cellsPerColumn=1,
      activationThreshold=3,
      initialPermanence=.50,
      connectedPermanence=.50,
      minThreshold=2,
      maxNewSynapseCount=3,
      permanenceIncrement=.02,
      permanenceDecrement=.02,
      predictedSegmentDecrement=0.0,
      seed=42,
      maxSegmentsPerCell=2)

    prevActiveColumns1 = [0, 1, 2]
    prevActiveColumns2 = [3, 4, 5]
    prevActiveColumns3 = [6, 7, 8]
    activeColumns = [9]

    tm.compute(prevActiveColumns1)
    tm.compute(activeColumns)

    self.assertEqual(1, tm.connections.numSegments(9))
    oldestSegment = list(tm.connections.segmentsForCell(9))[0]
    tm.reset()
    tm.compute(prevActiveColumns2)
    tm.compute(activeColumns)

    self.assertEqual(2, tm.connections.numSegments(9))

    oldPresynaptic = \
      set(synapse.presynapticCell
          for synapse in tm.connections.synapsesForSegment(oldestSegment))

    tm.reset()
    tm.compute(prevActiveColumns3)
    tm.compute(activeColumns)
    self.assertEqual(2, tm.connections.numSegments(9))

    # Verify none of the segments are connected to the cells the old
    # segment was connected to.

    for segment in tm.connections.segmentsForCell(9):
      newPresynaptic = set(synapse.presynapticCell
                           for synapse
                           in tm.connections.synapsesForSegment(segment))
      self.assertEqual([], list(oldPresynaptic & newPresynaptic))
示例#12
0
  def testPunishMatchingSegmentsInInactiveColumns(self):
    tm = TemporalMemory(
      columnDimensions=[32],
      cellsPerColumn=4,
      activationThreshold=3,
      initialPermanence=.2,
      connectedPermanence=.50,
      minThreshold=2,
      maxNewSynapseCount=4,
      permanenceIncrement=.10,
      permanenceDecrement=.10,
      predictedSegmentDecrement=0.02,
      seed=42)

    previousActiveColumns = [0]
    previousActiveCells = [0, 1, 2, 3]
    activeColumns = [1]
    previousInactiveCell = 81

    activeSegment = tm.connections.createSegment(42)
    as1 = tm.connections.createSynapse(activeSegment,
                                       previousActiveCells[0], .5)
    as2 = tm.connections.createSynapse(activeSegment,
                                       previousActiveCells[1], .5)
    as3 = tm.connections.createSynapse(activeSegment,
                                       previousActiveCells[2], .5)
    is1 = tm.connections.createSynapse(activeSegment,
                                       previousInactiveCell, .5)

    matchingSegment = tm.connections.createSegment(43)
    as4 = tm.connections.createSynapse(matchingSegment,
                                       previousActiveCells[0], .5)
    as5 = tm.connections.createSynapse(matchingSegment,
                                       previousActiveCells[1], .5)
    is2 = tm.connections.createSynapse(matchingSegment,
                                       previousInactiveCell, .5)

    tm.compute(previousActiveColumns, True)
    tm.compute(activeColumns, True)

    self.assertAlmostEqual(.48, tm.connections.dataForSynapse(as1).permanence)
    self.assertAlmostEqual(.48, tm.connections.dataForSynapse(as2).permanence)
    self.assertAlmostEqual(.48, tm.connections.dataForSynapse(as3).permanence)
    self.assertAlmostEqual(.48, tm.connections.dataForSynapse(as4).permanence)
    self.assertAlmostEqual(.48, tm.connections.dataForSynapse(as5).permanence)
    self.assertAlmostEqual(.50, tm.connections.dataForSynapse(is1).permanence)
    self.assertAlmostEqual(.50, tm.connections.dataForSynapse(is2).permanence)
示例#13
0
    def testRecycleLeastRecentlyActiveSegmentToMakeRoomForNewSegment(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=1,
                            activationThreshold=3,
                            initialPermanence=.50,
                            connectedPermanence=.50,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=.02,
                            permanenceDecrement=.02,
                            predictedSegmentDecrement=0.0,
                            seed=42,
                            maxSegmentsPerCell=2)

        prevActiveColumns1 = [0, 1, 2]
        prevActiveColumns2 = [3, 4, 5]
        prevActiveColumns3 = [6, 7, 8]
        activeColumns = [9]

        tm.compute(prevActiveColumns1)
        tm.compute(activeColumns)

        self.assertEqual(1, len(tm.connections.segmentsForCell(9)))
        oldestSegment = sorted(tm.connections.segmentsForCell(9))[0]

        tm.reset()
        tm.compute(prevActiveColumns2)
        tm.compute(activeColumns)

        self.assertEqual(2, len(tm.connections.segmentsForCell(9)))

        tm.reset()
        tm.compute(prevActiveColumns3)
        tm.compute(activeColumns)

        self.assertEqual(2, len(tm.connections.segmentsForCell(9)))

        synapses = tm.connections.synapsesForSegment(oldestSegment)
        self.assertEqual(3, len(synapses))
        presynapticCells = set()

        for synapse in synapses:
            synapseData = tm.connections.dataForSynapse(synapse)
            presynapticCells.add(synapseData.presynapticCell)

        expected = set([6, 7, 8])
        self.assertEqual(expected, presynapticCells)
示例#14
0
  def testGetBestMatchingSegment(self):
    tm = TemporalMemory(
      connectedPermanence=0.50,
      minThreshold=1
    )

    connections = tm.connections
    connections.createSegment(0)
    connections.createSynapse(0, 23, 0.6)
    connections.createSynapse(0, 37, 0.4)
    connections.createSynapse(0, 477, 0.9)

    connections.createSegment(0)
    connections.createSynapse(1, 49, 0.9)
    connections.createSynapse(1, 3, 0.8)

    connections.createSegment(1)
    connections.createSynapse(2, 733, 0.7)

    connections.createSegment(8)
    connections.createSynapse(3, 486, 0.9)

    activeSynapsesForSegment = {
      0: set([0, 1]),
      1: set([3]),
      2: set([5])
    }

    self.assertEqual(tm.getBestMatchingSegment(0,
                                               activeSynapsesForSegment,
                                               connections),
                     (0, set([0, 1])))

    self.assertEqual(tm.getBestMatchingSegment(1,
                                               activeSynapsesForSegment,
                                               connections),
                     (2, set([5])))

    self.assertEqual(tm.getBestMatchingSegment(8,
                                               activeSynapsesForSegment,
                                               connections),
                     (None, None))

    self.assertEqual(tm.getBestMatchingSegment(100,
                                               activeSynapsesForSegment,
                                               connections),
                     (None, None))
示例#15
0
    def testReinforceSelectedMatchingSegmentInBurstingColumn(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.21,
                            connectedPermanence=.50,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=.10,
                            permanenceDecrement=.08,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        previousActiveColumns = [0]
        previousActiveCells = [0, 1, 2, 3]
        activeColumns = [1]
        burstingCells = [4, 5, 6, 7]

        selectedMatchingSegment = tm.connections.createSegment(
            burstingCells[0])
        as1 = tm.connections.createSynapse(selectedMatchingSegment,
                                           previousActiveCells[0], .3)
        as2 = tm.connections.createSynapse(selectedMatchingSegment,
                                           previousActiveCells[1], .3)
        as3 = tm.connections.createSynapse(selectedMatchingSegment,
                                           previousActiveCells[2], .3)
        is1 = tm.connections.createSynapse(selectedMatchingSegment, 81, .3)

        otherMatchingSegment = tm.connections.createSegment(burstingCells[1])
        tm.connections.createSynapse(otherMatchingSegment,
                                     previousActiveCells[0], .3)
        tm.connections.createSynapse(otherMatchingSegment,
                                     previousActiveCells[1], .3)
        tm.connections.createSynapse(otherMatchingSegment, 81, .3)

        tm.compute(previousActiveColumns, True)
        tm.compute(activeColumns, True)

        self.assertAlmostEqual(.4,
                               tm.connections.dataForSynapse(as1).permanence)
        self.assertAlmostEqual(.4,
                               tm.connections.dataForSynapse(as2).permanence)
        self.assertAlmostEqual(.4,
                               tm.connections.dataForSynapse(as3).permanence)
        self.assertAlmostEqual(.22,
                               tm.connections.dataForSynapse(is1).permanence)
示例#16
0
  def testBurstColumns(self):
    tm = TemporalMemory(
      cellsPerColumn=4,
      connectedPermanence=0.50,
      minThreshold=1,
      seed=42
    )

    connections = tm.connections
    connections.createSegment(0)
    connections.createSynapse(0, 23, 0.6)
    connections.createSynapse(0, 37, 0.4)
    connections.createSynapse(0, 477, 0.9)

    connections.createSegment(0)
    connections.createSynapse(1, 49, 0.9)
    connections.createSynapse(1, 3, 0.8)

    connections.createSegment(1)
    connections.createSynapse(2, 733, 0.7)

    connections.createSegment(108)
    connections.createSynapse(3, 486, 0.9)

    activeColumns    = set([0, 1, 26])
    predictedColumns = set([26])
    prevActiveSynapsesForSegment = {
      0: set([0, 1]),
      1: set([3]),
      2: set([5])
    }

    (activeCells,
     winnerCells,
     learningSegments) = tm.burstColumns(activeColumns,
                                         predictedColumns,
                                         prevActiveSynapsesForSegment,
                                         connections)

    self.assertEqual(activeCells,      set([0, 1, 2, 3, 4, 5, 6, 7]))
    self.assertEqual(winnerCells,      set([0, 6]))  # 6 is randomly chosen cell
    self.assertEqual(learningSegments, set([0, 4]))  # 4 is new segment created

    # Check that new segment was added to winner cell (6) in column 1
    self.assertEqual(connections.segmentsForCell(6), set([4]))
示例#17
0
    def testAdaptSegmentToMax(self):
        tm = TemporalMemory()

        connections = tm.connections
        connections.createSegment(0)
        connections.createSynapse(0, 23, 0.9)

        tm.adaptSegment(connections, [23], tm.permanenceIncrement,
                        tm.permanenceDecrement, 0)
        synapseData = connections.dataForSynapse(0)
        self.assertAlmostEqual(synapseData.permanence, 1.0)

        # Now permanence should be at max
        tm.adaptSegment(connections, [23], tm.permanenceIncrement,
                        tm.permanenceDecrement, 0)

        synapseData = connections.dataForSynapse(0)
        self.assertAlmostEqual(synapseData.permanence, 1.0)
示例#18
0
    def testBestMatchingCellFewestSegments(self):
        tm = TemporalMemory(columnDimensions=[2],
                            cellsPerColumn=2,
                            connectedPermanence=0.50,
                            minThreshold=1,
                            seed=42)

        connections = tm.connections
        connections.createSegment(0)
        connections.createSynapse(0, 3, 0.3)

        activeSynapsesForSegment = set([])

        for _ in range(100):
            # Never pick cell 0, always pick cell 1
            (cell, _) = tm.bestMatchingCell(tm.cellsForColumn(0),
                                            activeSynapsesForSegment)
            self.assertEqual(cell, 1)
示例#19
0
    def testWriteTestFile(self):
        tm = TemporalMemory(columnDimensions=(32, ),
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=0.21,
                            connectedPermanence=0.50,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=0.1,
                            permanenceDecrement=0.1,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        self.serializationTestPrepare(tm)
        proto = TemporalMemoryProto_capnp.TemporalMemoryProto.new_message()
        tm.write(proto)
        with open("TemporalMemorySerializationWrite.tmp", "w") as f:
            proto.write(f)
示例#20
0
  def testBestMatchingSegment(self):
    tm = TemporalMemory(
      connectedPermanence=0.50,
      minThreshold=1
    )

    connections = tm.connections
    connections.createSegment(0)
    connections.createSynapse(0, 23, 0.6)
    connections.createSynapse(0, 37, 0.4)
    connections.createSynapse(0, 477, 0.9)

    connections.createSegment(0)
    connections.createSynapse(1, 49, 0.9)
    connections.createSynapse(1, 3, 0.8)

    connections.createSegment(1)
    connections.createSynapse(2, 733, 0.7)

    connections.createSegment(8)
    connections.createSynapse(3, 486, 0.9)

    activeCells = set([23, 37, 49, 733])

    self.assertEqual(tm.bestMatchingSegment(0,
                                            activeCells,
                                            connections),
                     (0, 2))

    self.assertEqual(tm.bestMatchingSegment(1,
                                            activeCells,
                                            connections),
                     (2, 1))

    self.assertEqual(tm.bestMatchingSegment(8,
                                            activeCells,
                                            connections),
                     (None, None))

    self.assertEqual(tm.bestMatchingSegment(100,
                                            activeCells,
                                            connections),
                     (None, None))
示例#21
0
  def testGetBestMatchingCell(self):
    tm = TemporalMemory(
      connectedPermanence=0.50,
      minThreshold=1,
      seed=42
    )

    connections = tm.connections
    connections.createSegment(0)
    connections.createSynapse(0, 23, 0.6)
    connections.createSynapse(0, 37, 0.4)
    connections.createSynapse(0, 477, 0.9)

    connections.createSegment(0)
    connections.createSynapse(1, 49, 0.9)
    connections.createSynapse(1, 3, 0.8)

    connections.createSegment(1)
    connections.createSynapse(2, 733, 0.7)

    connections.createSegment(108)
    connections.createSynapse(3, 486, 0.9)

    activeSynapsesForSegment = {
      0: set([0, 1]),
      1: set([3]),
      2: set([5])
    }

    self.assertEqual(tm.getBestMatchingCell(connections.cellsForColumn(0),
                                            activeSynapsesForSegment,
                                            connections),
                     (0, 0))

    self.assertEqual(tm.getBestMatchingCell(connections.cellsForColumn(3),  # column containing cell 108
                                            activeSynapsesForSegment,
                                            connections),
                     (96, None))  # Random cell from column

    self.assertEqual(tm.getBestMatchingCell(connections.cellsForColumn(999),
                                            activeSynapsesForSegment,
                                            connections),
                     (31972, None))  # Random cell from column
示例#22
0
    def testBurstUnpredictedColumns(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.21,
                            connectedPermanence=.5,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=.10,
                            permanenceDecrement=.10,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        activeColumns = [0]
        burstingCells = [0, 1, 2, 3]

        tm.compute(activeColumns, True)

        self.assertEqual(burstingCells, tm.getActiveCells())
示例#23
0
    def testConnectionsNeverChangeWhenLearningDisabled(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.2,
                            connectedPermanence=.50,
                            minThreshold=2,
                            maxNewSynapseCount=4,
                            permanenceIncrement=.10,
                            permanenceDecrement=.10,
                            predictedSegmentDecrement=0.02,
                            seed=42)

        prevActiveColumns = [0]
        prevActiveCells = [0, 1, 2, 3]
        activeColumns = [1, 2]  #1 is predicted, 2 is bursting
        prevInactiveCell = 81
        expectedActiveCells = [4]

        correctActiveSegment = tm.connections.createSegment(
            expectedActiveCells[0])
        tm.connections.createSynapse(correctActiveSegment, prevActiveCells[0],
                                     .5)
        tm.connections.createSynapse(correctActiveSegment, prevActiveCells[1],
                                     .5)
        tm.connections.createSynapse(correctActiveSegment, prevActiveCells[2],
                                     .5)

        wrongMatchingSegment = tm.connections.createSegment(43)
        tm.connections.createSynapse(wrongMatchingSegment, prevActiveCells[0],
                                     .5)
        tm.connections.createSynapse(wrongMatchingSegment, prevActiveCells[1],
                                     .5)
        tm.connections.createSynapse(wrongMatchingSegment, prevInactiveCell,
                                     .5)

        before = copy.deepcopy(tm.connections)

        tm.compute(prevActiveColumns, False)
        tm.compute(activeColumns, False)

        self.assertEqual(before, tm.connections)
示例#24
0
    def testNoNewSegmentIfNotEnoughWinnerCells(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.21,
                            connectedPermanence=.50,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=.10,
                            permanenceDecrement=.10,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        zeroColumns = []
        activeColumns = [0]

        tm.compute(zeroColumns, True)
        tm.compute(activeColumns, True)

        self.assertEqual(0, tm.connections.numSegments())
示例#25
0
    def testAdaptSegment(self):
        tm = TemporalMemory()

        connections = tm.connections
        connections.createSegment(0)
        connections.createSynapse(0, 23, 0.6)
        connections.createSynapse(0, 37, 0.4)
        connections.createSynapse(0, 477, 0.9)

        tm.adaptSegment(connections, [23, 37], tm.permanenceIncrement,
                        tm.permanenceDecrement, 0)

        synapseData = connections.dataForSynapse(0)
        self.assertAlmostEqual(synapseData.permanence, 0.7)

        synapseData = connections.dataForSynapse(1)
        self.assertAlmostEqual(synapseData.permanence, 0.5)

        synapseData = connections.dataForSynapse(2)
        self.assertAlmostEqual(synapseData.permanence, 0.8)
    def setUp(self):
        self.tm = TemporalMemory(columnDimensions=[2048],
                                 cellsPerColumn=32,
                                 initialPermanence=0.5,
                                 connectedPermanence=0.8,
                                 minThreshold=10,
                                 maxNewSynapseCount=12,
                                 permanenceIncrement=0.1,
                                 permanenceDecrement=0.05,
                                 activationThreshold=15)

        self.tp = TP(numberOfCols=2048,
                     cellsPerColumn=32,
                     initialPerm=0.5,
                     connectedPerm=0.8,
                     minThreshold=10,
                     newSynapseCount=12,
                     permanenceInc=0.1,
                     permanenceDec=0.05,
                     activationThreshold=15,
                     globalDecay=0,
                     burnIn=1,
                     checkSynapseConsistency=False,
                     pamLength=1)

        self.tp10x2 = TP10X2(numberOfCols=2048,
                             cellsPerColumn=32,
                             initialPerm=0.5,
                             connectedPerm=0.8,
                             minThreshold=10,
                             newSynapseCount=12,
                             permanenceInc=0.1,
                             permanenceDec=0.05,
                             activationThreshold=15,
                             globalDecay=0,
                             burnIn=1,
                             checkSynapseConsistency=False,
                             pamLength=1)

        self.patternMachine = PatternMachine(2048, 40, num=100)
        self.sequenceMachine = SequenceMachine(self.patternMachine)
示例#27
0
    def testActiveSegmentGrowSynapsesAccordingToPotentialOverlap(self):
        """
    When a segment becomes active, grow synapses to previous winner cells.

    The number of grown synapses is calculated from the "matching segment"
    overlap, not the "active segment" overlap.
    """
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=1,
                            activationThreshold=2,
                            initialPermanence=.21,
                            connectedPermanence=.50,
                            minThreshold=1,
                            maxNewSynapseCount=4,
                            permanenceIncrement=.10,
                            permanenceDecrement=.10,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        # Use 1 cell per column so that we have easy control over the winner cells.
        previousActiveColumns = [0, 1, 2, 3, 4]
        prevWinnerCells = [0, 1, 2, 3, 4]
        activeColumns = [5]

        activeSegment = tm.connections.createSegment(5)
        tm.connections.createSynapse(activeSegment, 0, .5)
        tm.connections.createSynapse(activeSegment, 1, .5)
        tm.connections.createSynapse(activeSegment, 2, .2)

        tm.compute(previousActiveColumns, True)
        self.assertEqual(prevWinnerCells, tm.getWinnerCells())
        tm.compute(activeColumns, True)

        synapses = tm.connections.synapsesForSegment(activeSegment)
        self.assertEqual(4, len(synapses))

        synapse = synapses[3]
        synapseData = tm.connections.dataForSynapse(synapse)
        self.assertAlmostEqual(.21, synapseData.permanence)
        self.assertTrue(synapseData.presynapticCell == prevWinnerCells[3]
                        or synapseData.presynapticCell == prevWinnerCells[4])
示例#28
0
  def testBestMatchingCell(self):
    tm = TemporalMemory(
      connectedPermanence=0.50,
      minThreshold=1,
      seed=42
    )

    connections = tm.connections
    connections.createSegment(0)
    connections.createSynapse(0, 23, 0.6)
    connections.createSynapse(0, 37, 0.4)
    connections.createSynapse(0, 477, 0.9)

    connections.createSegment(0)
    connections.createSynapse(1, 49, 0.9)
    connections.createSynapse(1, 3, 0.8)

    connections.createSegment(1)
    connections.createSynapse(2, 733, 0.7)

    connections.createSegment(108)
    connections.createSynapse(3, 486, 0.9)

    activeCells = set([23, 37, 49, 733])

    self.assertEqual(tm.bestMatchingCell(tm.cellsForColumn(0),
                                         activeCells,
                                         connections),
                     (0, 0))

    self.assertEqual(tm.bestMatchingCell(tm.cellsForColumn(3),  # column containing cell 108
                                         activeCells,
                                         connections),
                     (103, None))  # Random cell from column

    self.assertEqual(tm.bestMatchingCell(tm.cellsForColumn(999),
                                         activeCells,
                                         connections),
                     (31979, None))  # Random cell from column
示例#29
0
    def testReinforceCorrectlyActiveSegments(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.2,
                            connectedPermanence=.50,
                            minThreshold=2,
                            maxNewSynapseCount=4,
                            permanenceIncrement=.10,
                            permanenceDecrement=.08,
                            predictedSegmentDecrement=0.02,
                            seed=42)

        prevActiveColumns = [0]
        prevActiveCells = [0, 1, 2, 3]
        activeColumns = [1]
        activeCell = 5

        activeSegment = tm.connections.createSegment(activeCell)
        as1 = tm.connections.createSynapse(activeSegment, prevActiveCells[0],
                                           .5)
        as2 = tm.connections.createSynapse(activeSegment, prevActiveCells[1],
                                           .5)
        as3 = tm.connections.createSynapse(activeSegment, prevActiveCells[2],
                                           .5)
        is1 = tm.connections.createSynapse(activeSegment, 81,
                                           .5)  #inactive synapse

        tm.compute(prevActiveColumns, True)
        tm.compute(activeColumns, True)

        self.assertAlmostEqual(.6,
                               tm.connections.dataForSynapse(as1).permanence)
        self.assertAlmostEqual(.6,
                               tm.connections.dataForSynapse(as2).permanence)
        self.assertAlmostEqual(.6,
                               tm.connections.dataForSynapse(as3).permanence)
        self.assertAlmostEqual(.42,
                               tm.connections.dataForSynapse(is1).permanence)
示例#30
0
    def testPredictedActiveCellsAreAlwaysWinners(self):
        tm = TemporalMemory(columnDimensions=[32],
                            cellsPerColumn=4,
                            activationThreshold=3,
                            initialPermanence=.21,
                            connectedPermanence=.5,
                            minThreshold=2,
                            maxNewSynapseCount=3,
                            permanenceIncrement=.10,
                            permanenceDecrement=.10,
                            predictedSegmentDecrement=0.0,
                            seed=42)

        previousActiveColumns = [0]
        activeColumns = [1]
        previousActiveCells = [0, 1, 2, 3]
        expectedWinnerCells = [4, 6]

        activeSegment1 = tm.connections.createSegment(expectedWinnerCells[0])
        tm.connections.createSynapse(activeSegment1, previousActiveCells[0],
                                     .5)
        tm.connections.createSynapse(activeSegment1, previousActiveCells[1],
                                     .5)
        tm.connections.createSynapse(activeSegment1, previousActiveCells[2],
                                     .5)

        activeSegment2 = tm.connections.createSegment(expectedWinnerCells[1])
        tm.connections.createSynapse(activeSegment2, previousActiveCells[0],
                                     .5)
        tm.connections.createSynapse(activeSegment2, previousActiveCells[1],
                                     .5)
        tm.connections.createSynapse(activeSegment2, previousActiveCells[2],
                                     .5)

        tm.compute(previousActiveColumns, False)
        tm.compute(activeColumns, False)

        self.assertEqual(expectedWinnerCells, tm.getWinnerCells())