Esempio n. 1
0
    def testNumSynapses(self):
        """
    Test that connections are generated on predefined segments.
    """
        random = Random(1981)
        active_cells = np.array(random.sample(
            np.arange(0, NUM_CELLS, 1, dtype="uint32"), 40),
                                dtype="uint32")
        active_cells.sort()

        presynaptic_input = list(range(0, 10))
        presynaptic_input_set = set(presynaptic_input)
        inputSDR = SDR(1024)
        inputSDR.sparse = presynaptic_input

        connections = Connections(NUM_CELLS, 0.3)
        for i in range(NUM_CELLS):
            seg = connections.createSegment(i, 1)

        for cell in active_cells:
            segments = connections.segmentsForCell(cell)
            segment = segments[0]
            for c in presynaptic_input:
                connections.createSynapse(segment, c, 0.1)

            connections.adaptSegment(segment, inputSDR, 0.1, 0.0, False)

            num_synapses = connections.numSynapses(segment)
            self.assertEqual(num_synapses, len(presynaptic_input),
                             "Missing synapses")

        self.assertEqual(connections.numSynapses(),
                         len(presynaptic_input) * 40, "Missing synapses")
Esempio n. 2
0
  def testDestroySegment(self):
    co = Connections(NUM_CELLS, 0.51)
    self.assertEqual(co.numSegments(), 0, "there are zero segments yet")

    # successfully remove
    seg = co.createSegment(1, 20)
    self.assertEqual(co.numSegments(), 1)
    n = co.numConnectedSynapses(seg) #uses dataForSegment()
    co.destroySegment(seg)
    self.assertEqual(co.numSegments(), 0, "segment should have been removed")
Esempio n. 3
0
    def testAdaptShouldIncrementSynapses(self):
        """
    Test that connections are generated on predefined segments.
    """
        random = Random(1981)
        active_cells = np.array(random.sample(
            np.arange(0, NUM_CELLS, 1, dtype="uint32"), 40),
                                dtype="uint32")
        active_cells.sort()

        presynaptic_input = list(range(0, 10))
        presynaptic_input_set = set(presynaptic_input)
        inputSDR = SDR(1024)
        inputSDR.sparse = presynaptic_input

        connections = Connections(NUM_CELLS, 0.51)
        for i in range(NUM_CELLS):
            seg = connections.createSegment(i, 1)

        for cell in active_cells:
            segments = connections.segmentsForCell(cell)
            segment = segments[0]
            for c in presynaptic_input:
                connections.createSynapse(segment, c, 0.1)
            connections.adaptSegment(segment, inputSDR, 0.1, 0.001, True)

            presynamptic_cells = self._getPresynapticCells(
                connections, segment, 0.2)
            self.assertEqual(presynamptic_cells, presynaptic_input_set,
                             "Missing synapses")

            presynamptic_cells = self._getPresynapticCells(
                connections, segment, 0.3)
            self.assertEqual(presynamptic_cells, set(), "Too many synapses")
Esempio n. 4
0
    def testAdaptShouldRemoveSegments(self):
        """
    Test that connections are generated on predefined segments.
    """
        random = Random(1981)
        active_cells = np.array(random.sample(
            np.arange(0, NUM_CELLS, 1, dtype="uint32"), 40),
                                dtype="uint32")
        active_cells.sort()

        presynaptic_input = list(range(0, 10))
        inputSDR = SDR(1024)
        inputSDR.sparse = presynaptic_input

        connections = Connections(NUM_CELLS, 0.51)
        for i in range(NUM_CELLS):
            seg = connections.createSegment(i, 1)

        for cell in active_cells:
            segments = connections.segmentsForCell(cell)
            self.assertEqual(len(segments), 1,
                             "Segments were prematurely destroyed.")
            segment = segments[0]
            connections.adaptSegment(segment, inputSDR, 0.1, 0.001, True)
            segments = connections.segmentsForCell(cell)
            self.assertEqual(len(segments), 0, "Segments were not destroyed.")
Esempio n. 5
0
 def testAdaptShouldRemoveSegments(self):
   """
   Test that connections are generated on predefined segments.
   """
   random = Random(1981)
   active_cells = np.array(random.sample(np.arange(0, NUM_CELLS, 1, dtype="uint32"), 40), dtype="uint32")
   active_cells.sort()
   
   presynaptic_input = list(range(0, 10))
   inputSDR = SDR(1024)
   inputSDR.sparse = presynaptic_input
   
   connections = Connections(NUM_CELLS, 0.51) 
   for i in range(NUM_CELLS):
     seg = connections.createSegment(i, 2)
     seg = connections.createSegment(i, 2) #create 2 segments on each cell
   
   for cell in active_cells:
       segments = connections.segmentsForCell(cell)
       self.assertEqual(len(segments), 2, "Segments were prematurely destroyed.")
       segment = segments[0]
       numSynapsesOnSegment = len(segments)
       connections.adaptSegment(segment, inputSDR, 0.1, 0.001, pruneZeroSynapses=True, segmentThreshold=1) #set to =1 so that segments get always deleted in this test
       segments = connections.segmentsForCell(cell)
       self.assertEqual(len(segments), 1, "Segments were not destroyed.")
Esempio n. 6
0
    def testDestroySynapse(self):
        # empty connections, create segment seg and a synapse syn
        co = Connections(NUM_CELLS, 0.51)
        seg = co.createSegment(NUM_CELLS - 1, 1)
        syn1 = co.createSynapse(seg, NUM_CELLS - 1, 0.52)

        # destroy the synapse
        co.destroySynapse(syn1)
        self.assertEqual(co.numSynapses(), 0)

        with pytest.raises(
                RuntimeError
        ):  # NTA_CHECK, data for removed synapse must not be accessible!
            permRemoved = co.permanenceForSynapse(syn1)
            assert permRemoved == perm1

        # double remove should be just ignored
        co.destroySynapse(syn1)
Esempio n. 7
0
  def testDestroySynapse(self):
    # empty connections, create segment seg and a synapse syn
    co = Connections(NUM_CELLS, 0.51)
    seg = co.createSegment(NUM_CELLS-1, 1)
    syn1 = co.createSynapse(seg, NUM_CELLS-1, 0.52)

    # destroy the synapse
    co.destroySynapse(syn1)
    self.assertEqual(co.numSynapses(), 0)
Esempio n. 8
0
    def LoadConnections(self, connectionType, regionName,
                        iteration):  # loads connections (can be more then one)

        self.dumpFolderPath = os.path.splitext(
            self.databaseFilePath)[0] + "_dumpData"
        if connectionType != '':
            connectionType = "_" + connectionType
        try:
            with open(
                    os.path.join(self.dumpFolderPath,
                                 str(regionName) + "_" + str(iteration)) +
                    connectionType + ".dump", "rb") as f:
                connections = Connections.load(f.read())
        except FileNotFoundError:
            connections = None
        return connections
Esempio n. 9
0
    def testComputeActivityUnion(self):
        """
    Test that connections are generated on predefined segments.
    """
        random = Random(1981)
        active_cells = np.array(random.sample(
            np.arange(0, NUM_CELLS, 1, dtype="uint32"), 40),
                                dtype="uint32")
        active_cells.sort()

        presynaptic_input1 = list(range(0, 10))
        presynaptic_input1_set = set(presynaptic_input1)
        presynaptic_input2 = list(range(10, 20))
        presynaptic_input2_set = set(presynaptic_input1)

        connections = Connections(NUM_CELLS, 0.51, False)
        for i in range(NUM_CELLS):
            seg = connections.createSegment(i, 1)

        self._learn(connections, active_cells, presynaptic_input1)
        self._learn(connections, active_cells, presynaptic_input2)

        numSynapses = connections.numSynapses()
        self.assertNotEqual(
            numSynapses, 40,
            "There should be a synapse for each presynaptic cell")

        active_cells_set = set(active_cells)
        inputSDR = SDR(1024)
        inputSDR.sparse = presynaptic_input1

        numActiveConnectedSynapsesForSegment = connections.computeActivity(
            inputSDR, False)
        for cell, count in enumerate(numActiveConnectedSynapsesForSegment):
            if cell in active_cells_set:
                self.assertNotEqual(count, 0, "Segment should be active")

        inputSDR.sparse = presynaptic_input2
        numActiveConnectedSynapsesForSegment = connections.computeActivity(
            inputSDR, False)
        for cell, count in enumerate(numActiveConnectedSynapsesForSegment):
            if cell in active_cells_set:
                self.assertNotEqual(count, 0, "Segment should be active")
Esempio n. 10
0
    def testComputeActivity(self):
        """
    Test that connections are generated on predefined segments.
    """
        random = Random(1981)
        active_cells = np.array(random.sample(
            np.arange(0, NUM_CELLS, 1, dtype="uint32"), 40),
                                dtype="uint32")
        active_cells.sort()

        presynaptic_input = list(range(0, 10))
        presynaptic_input_set = set(presynaptic_input)
        inputSDR = SDR(1024)
        inputSDR.sparse = presynaptic_input
        l = len(presynaptic_input)

        connections = Connections(NUM_CELLS, 0.51, False)
        for i in range(NUM_CELLS):
            seg = connections.createSegment(i, 1)

        numActiveConnectedSynapsesForSegment = connections.computeActivity(
            inputSDR, False)
        for count in numActiveConnectedSynapsesForSegment:
            self.assertEqual(count, 0, "Segment should not be active")

        for cell in active_cells:
            segments = connections.segmentsForCell(cell)
            segment = segments[0]
            for c in presynaptic_input:
                connections.createSynapse(segment, c, 0.1)

        numActiveConnectedSynapsesForSegment = connections.computeActivity(
            inputSDR, False)
        for count in numActiveConnectedSynapsesForSegment:
            self.assertEqual(count, 0, "Segment should not be active")

        for cell in active_cells:
            segments = connections.segmentsForCell(cell)
            segment = segments[0]
            connections.adaptSegment(segment, inputSDR, 0.5, 0.0, False)

        active_cells_set = set(active_cells)
        numActiveConnectedSynapsesForSegment = connections.computeActivity(
            inputSDR, False)
        for cell, count in enumerate(numActiveConnectedSynapsesForSegment):
            if cell in active_cells_set:
                self.assertEqual(count, l, "Segment should be active")
            else:
                self.assertEqual(count, 0, "Segment should not be active")
Esempio n. 11
0
 def testConnectedThreshold(self):
     conn = Connections(1024, 0.123, False)
     self.assertAlmostEqual(conn.connectedThreshold, 0.123, places=4)
Esempio n. 12
0
    data = []
    for cell in range(connections.numCells()):
        for seg in connections.segmentsForCell(cell):
            for syn in connections.synapsesForSegment(seg):
                datum = connections.permanenceForSynapse(syn)
                data.append(datum)
    plt.figure("Histogram of Synapse Permanences")
    plt.hist(data, bins=100, range=(0, 1))
    plt.axvline(connections.connectedThreshold, color='red')
    plt.title("Histogram of Synapse Permanences")
    plt.ylabel("Number of Synapses")
    plt.xlabel("Permanence of Synapse")
    if show:
        plt.show()


if __name__ == '__main__':
    import argparse
    # Accept location of data dump from command line
    parser = argparse.ArgumentParser()
    parser.add_argument('connections_save_file')
    args = parser.parse_args()

    # Load and run the connections object.
    with open(args.connections_save_file, 'rb') as data_file:
        data = data_file.read()

    # TODO: Try both pickle and load, use whichever works.
    C = Connections.load(data)
    main(C)
Esempio n. 13
0
    def testDestroySegment(self):
        co = Connections(NUM_CELLS, 0.51)
        self.assertEqual(co.numSegments(), 0, "there are zero segments yet")

        # removing while no segments exist
        co.destroySegment(1)

        # successfully remove
        seg = co.createSegment(1, 20)
        self.assertEqual(co.numSegments(), 1)
        n = co.numConnectedSynapses(seg)  #uses dataForSegment()
        co.destroySegment(seg)
        self.assertEqual(co.numSegments(), 0,
                         "segment should have been removed")
        with pytest.raises(RuntimeError):
            n2 = co.numConnectedSynapses(seg)
Esempio n. 14
0
    def testCreateSegment(self):
        co = Connections(NUM_CELLS, 0.51)
        self.assertEqual(co.numSegments(), 0, "there are zero segments yet")

        # create segment
        co.createSegment(NUM_CELLS - 1, 20)
        self.assertEqual(co.numSegments(), 1, "created 1 new segment")

        # wrong param
        with pytest.raises(RuntimeError):
            co.createSegment(1, 0)  #wrong param maxSegmentsPerCell "0"

        # wrong param - OOB cell
        with pytest.raises(RuntimeError):
            co.createSegment(NUM_CELLS + 22, 1)

        # another segment
        co.createSegment(NUM_CELLS - 1, 20)
        self.assertEqual(co.numSegments(), 2)

        # segment pruning -> reduce to 1 seg per cell
        co.createSegment(NUM_CELLS - 1, 1)
        self.assertEqual(co.numSegments(), 1)
Esempio n. 15
0
    def testCreateSynapse(self):
        # empty connections, create segment and a synapse
        co = Connections(NUM_CELLS, 0.51)
        self.assertEqual(co.numSynapses(), 0)
        self.assertEqual(co.numSegments(), 0)

        # 1st, create a segment
        seg = co.createSegment(NUM_CELLS - 1, 1)
        self.assertEqual(co.numSegments(), 1)

        #1. create a synapse on that segment
        syn1 = co.createSynapse(seg, NUM_CELLS - 1, 0.52)
        self.assertEqual(pytest.approx(co.permanenceForSynapse(syn1)), 0.52)
        self.assertEqual(co.numSynapses(), 1)

        #2. creating a duplicit synapse should not crash!
        syn2 = co.createSynapse(seg, NUM_CELLS - 1, 0.52)
        self.assertEqual(syn1, syn2,
                         "creating duplicate synapses should return the same")
        self.assertEqual(co.numSynapses(), 1,
                         "Duplicate synapse, number should not increase")

        #3. create a different synapse
        syn3 = co.createSynapse(seg, 1, 0.52)
        self.assertNotEqual(
            syn1, syn3, "creating a different synapse must create a new one")
        self.assertEqual(co.numSynapses(), 2,
                         "New synapse should increase the number")

        #4. create existing synapse with a new value -> should update permanence
        #4.a lower permanence -> keep max()
        syn4 = co.createSynapse(
            seg, NUM_CELLS - 1,
            0.11)  #all the same just permanence is a lower val
        self.assertEqual(syn1, syn4, "just updating existing syn")
        self.assertEqual(co.numSynapses(), 2,
                         "Duplicate synapse, number should not increase")
        self.assertEqual(pytest.approx(co.permanenceForSynapse(syn1)), 0.52,
                         "update keeps the larger value")

        #4.b higher permanence -> update
        syn5 = co.createSynapse(
            seg, NUM_CELLS - 1,
            0.99)  #all the same just permanence is a higher val
        self.assertEqual(syn1, syn5, "just updating existing syn")
        self.assertEqual(co.numSynapses(), 2,
                         "Duplicate synapse, number should not increase")
        self.assertEqual(pytest.approx(co.permanenceForSynapse(syn1)), 0.99,
                         "updated to the larger permanence value")