コード例 #1
0
 def mmGetDefaultMetrics(self, verbosity=1):
   resetsTrace = self.mmGetTraceResets()
   return ([Metric.createFromTrace(trace, excludeResets=resetsTrace)
             for trace in self.mmGetDefaultTraces()[:-3]] +
           [Metric.createFromTrace(trace)
             for trace in self.mmGetDefaultTraces()[-3:-1]] +
           [self.mmGetMetricSequencesPredictedActiveCellsPerColumn(),
            self.mmGetMetricSequencesPredictedActiveCellsShared()])
コード例 #2
0
 def mmGetDefaultMetrics(self, verbosity=1):
   resetsTrace = self.mmGetTraceResets()
   return ([Metric.createFromTrace(trace, excludeResets=resetsTrace)
             for trace in self.mmGetDefaultTraces()[:-3]] +
           [Metric.createFromTrace(trace)
             for trace in self.mmGetDefaultTraces()[-3:-1]] +
           [self.mmGetMetricSequencesPredictedActiveCellsPerColumn(),
            self.mmGetMetricSequencesPredictedActiveCellsShared()])
コード例 #3
0
 def mmGetDefaultMetrics(self, verbosity=1):
     resetsTrace = self.mmGetTraceResets()
     return ([
         Metric.createFromTrace(trace, excludeResets=resetsTrace)
         for trace in self.mmGetDefaultTraces()[:-3]
     ] + [
         Metric.createFromTrace(trace)
         for trace in self.mmGetDefaultTraces()[-3:-1]
     ])
コード例 #4
0
ファイル: metric_test.py プロジェクト: Erichy94/nupic
 def testCreateFromTrace(self):
   metric = Metric.createFromTrace(self.trace)
   self.assertEqual(metric.title, self.trace.title)
   self.assertEqual(metric.min, 0)
   self.assertEqual(metric.max, 5)
   self.assertEqual(metric.sum, 15)
   self.assertEqual(metric.mean, 2.5)
   self.assertEqual(metric.standardDeviation, 1.707825127659933)
コード例 #5
0
 def testCreateFromTrace(self):
     metric = Metric.createFromTrace(self.trace)
     self.assertEqual(metric.title, self.trace.title)
     self.assertEqual(metric.min, 0)
     self.assertEqual(metric.max, 5)
     self.assertEqual(metric.sum, 15)
     self.assertEqual(metric.mean, 2.5)
     self.assertEqual(metric.standardDeviation, 1.707825127659933)
コード例 #6
0
    def mmGetMetricBitlife(self):
        """
    See `mmGetDataBitlife` for description of bitlife.

    @return (Metric) bitlife metric
    """
        data = self._mmComputeBitLifeStats()
        return Metric(self, "Union SDR bitlife", data)
コード例 #7
0
  def mmGetMetricDutyCycles(self):
    """
    @return (Metric) duty cycle metric
    """
    dutyCycles = self.mmGetDataDutyCycles()

    return Metric(self,
                  "total column duty cycles",
                  dutyCycles)
コード例 #8
0
ファイル: metric_test.py プロジェクト: Erichy94/nupic
 def testCreateFromTraceExcludeResets(self):
   resetTrace = BoolsTrace(self, "resets")
   resetTrace.data = [True, False, False, True, False, False]
   metric = Metric.createFromTrace(self.trace, excludeResets=resetTrace)
   self.assertEqual(metric.title, self.trace.title)
   self.assertEqual(metric.min, 0)
   self.assertEqual(metric.max, 5)
   self.assertEqual(metric.sum, 10)
   self.assertEqual(metric.mean, 2.5)
   self.assertEqual(metric.standardDeviation, 1.8027756377319946)
コード例 #9
0
 def testCreateFromTraceExcludeResets(self):
     resetTrace = BoolsTrace(self, "resets")
     resetTrace.data = [True, False, False, True, False, False]
     metric = Metric.createFromTrace(self.trace, excludeResets=resetTrace)
     self.assertEqual(metric.title, self.trace.title)
     self.assertEqual(metric.min, 0)
     self.assertEqual(metric.max, 5)
     self.assertEqual(metric.sum, 10)
     self.assertEqual(metric.mean, 2.5)
     self.assertEqual(metric.standardDeviation, 1.8027756377319946)
コード例 #10
0
  def mmGetMetricFromTrace(self, trace):
    """
    Convenience method to compute a metric over an indices trace, excluding
    resets.

    @param (IndicesTrace) Trace of indices

    @return (Metric) Metric over trace excluding resets
    """
    return Metric.createFromTrace(trace.makeCountsTrace(),
                                  excludeResets=self.mmGetTraceResets())
コード例 #11
0
    def mmGetMetricFromTrace(self, trace):
        """
    Convenience method to compute a metric over an indices trace, excluding
    resets.

    @param (IndicesTrace) Trace of indices

    @return (Metric) Metric over trace excluding resets
    """
        return Metric.createFromTrace(trace.makeCountsTrace(),
                                      excludeResets=self.mmGetTraceResets())
コード例 #12
0
    def mmGetMetricDistinctnessConfusion(self):
        """
    For each iteration that doesn't follow a reset, looks at every other
    iteration for every other world that doesn't follow a reset, and computes
    the number of bits that show up in both sets of active cells those that
    iteration. This metric returns the distribution of those numbers.

    @return (Metric) Distinctness confusion metric
    """
        self._mmComputeSequenceRepresentationData()
        numbers = self._mmData["distinctnessConfusion"]
        return Metric(self, "distinctness confusion", numbers)
コード例 #13
0
  def mmGetMetricEntropy(self):
    """
    @return (Metric) entropy
    """
    dutyCycles = self.mmGetDataDutyCycles()
    MIN_ACTIVATION_PROB = 0.000001

    dutyCycles[dutyCycles < MIN_ACTIVATION_PROB] = MIN_ACTIVATION_PROB
    dutyCycles = dutyCycles / numpy.sum(dutyCycles)

    entropy = -numpy.dot(dutyCycles, numpy.log2(dutyCycles))
    return Metric(self, "entropy", entropy)
コード例 #14
0
    def mmGetMetricStabilityConfusion(self):
        """
    For each iteration that doesn't follow a reset, looks at every other
    iteration for the same world that doesn't follow a reset, and computes the
    number of bits that show up in one or the other set of active cells for
    that iteration, but not both. This metric returns the distribution of those
    numbers.

    @return (Metric) Stability confusion metric
    """
        self._mmComputeSequenceRepresentationData()
        numbers = self._mmData["stabilityConfusion"]
        return Metric(self, "stability confusion", numbers)
コード例 #15
0
  def mmGetDefaultMetrics(self, verbosity=1):
    metrics = ([Metric.createFromTrace(trace)
                for trace in self.mmGetDefaultTraces()[:-2]])

    connectionsPerColumnMetricIntial = (
      self._mmTraces["connectionsPerColumnMetric"].data[0].copy())
    connectionsPerColumnMetricIntial.title += " (initial)"
    connectionsPerColumnMetricFinal = (
      self._mmTraces["connectionsPerColumnMetric"].data[-1].copy())
    connectionsPerColumnMetricFinal.title += " (final)"

    metrics += [self.mmGetMetricStabilityConfusion(),
                self.mmGetMetricDistinctnessConfusion(),
                connectionsPerColumnMetricIntial,
                connectionsPerColumnMetricFinal]

    return metrics
コード例 #16
0
    def mmGetMetricSequencesPredictedActiveCellsPerColumn(self):
        """
    Metric for number of predicted => active cells per column for each sequence

    @return (Metric) metric
    """
        self._mmComputeTransitionTraces()

        numCellsPerColumn = []

        for predictedActiveCells in (
                self._mmData["predictedActiveCellsForSequence"].values()):
            cellsForColumn = self.mapCellsToColumns(predictedActiveCells)
            numCellsPerColumn += [len(x) for x in cellsForColumn.values()]

        return Metric(
            self, "# predicted => active cells per column for each sequence",
            numCellsPerColumn)
コード例 #17
0
    def mmGetMetricSequencesPredictedActiveCellsShared(self):
        """
    Metric for number of sequences each predicted => active cell appears in

    Note: This metric is flawed when it comes to high-order sequences.

    @return (Metric) metric
    """
        self._mmComputeTransitionTraces()

        numSequencesForCell = defaultdict(lambda: 0)

        for predictedActiveCells in (
                self._mmData["predictedActiveCellsForSequence"].values()):
            for cell in predictedActiveCells:
                numSequencesForCell[cell] += 1

        return Metric(self,
                      "# sequences each predicted => active cells appears in",
                      numSequencesForCell.values())
コード例 #18
0
    def mmGetDefaultMetrics(self, verbosity=1):
        metrics = ([
            Metric.createFromTrace(trace)
            for trace in self.mmGetDefaultTraces()[:-2]
        ])

        connectionsPerColumnMetricIntial = (
            self._mmTraces["connectionsPerColumnMetric"].data[0].copy())
        connectionsPerColumnMetricIntial.title += " (initial)"
        connectionsPerColumnMetricFinal = (
            self._mmTraces["connectionsPerColumnMetric"].data[-1].copy())
        connectionsPerColumnMetricFinal.title += " (final)"

        metrics += [
            self.mmGetMetricStabilityConfusion(),
            self.mmGetMetricDistinctnessConfusion(),
            connectionsPerColumnMetricIntial, connectionsPerColumnMetricFinal
        ]

        return metrics
コード例 #19
0
    def compute(self, *args, **kwargs):
        sequenceLabel = None
        if "sequenceLabel" in kwargs:
            sequenceLabel = kwargs["sequenceLabel"]
            del kwargs["sequenceLabel"]

        activeColumns = super(TemporalPoolerMonitorMixin,
                              self).compute(*args, **kwargs)
        activeColumns = set(activeColumns)
        activeCells = activeColumns  # TODO: Update when moving to a cellular TP

        self._mmTraces["activeCells"].data.append(activeCells)
        self._mmTraces["sequenceLabels"].data.append(sequenceLabel)

        self._mmTraces["resets"].data.append(self._mmResetActive)
        self._mmResetActive = False

        self._mmTraces["connectionsPerColumnMetric"].data.append(
            Metric(self, "connections per column",
                   self._connectedCounts.tolist()))

        self._sequenceRepresentationDataStale = True
コード例 #20
0
    def compute(self, *args, **kwargs):
        sequenceLabel = kwargs.pop("sequenceLabel", None)

        unionSDR = super(UnionTemporalPoolerMonitorMixin,
                         self).compute(*args, **kwargs)

        ### From spatial pooler
        # total number of connections
        connectedCounts = numpy.zeros(self.getNumColumns(), dtype=uintType)
        self.getConnectedCounts(connectedCounts)
        numConnections = numpy.sum(connectedCounts)

        self._mmTraces["unionSDR"].data.append(set(unionSDR))
        self._mmTraces["numConnections"].data.append(numConnections)
        self._mmTraces["sequenceLabels"].data.append(sequenceLabel)
        self._mmTraces["resets"].data.append(self._mmResetActive)
        self._mmResetActive = False
        self._mmTraces["connectionsPerColumnMetric"].data.append(
            Metric(self, "connections per column",
                   self._connectedCounts.tolist()))

        self._sequenceRepresentationDataStale = True
        self._mmUpdateDutyCycles()
コード例 #21
0
  def mmGetDefaultMetrics(self, verbosity=1):
    metrics = ([Metric.createFromTrace(trace)
                for trace in self.mmGetDefaultTraces()])
    metrics += [self.mmGetMetricDutyCycles()]

    return metrics
コード例 #22
0
 def mmGetMetricConnectedCounts(self):
     data = self.mmGetDataConnectedCounts()
     return Metric(self, "Connected synapse counts", data)
コード例 #23
0
 def mmGetMetricPersistenceDutyCycle(self):
     """
 @return (Metric) duty cycle metric for persistences
 """
     data = self.mmGetDataPersistenceDutyCycle()
     return Metric(self, "Persistence duty cycle", data)
コード例 #24
0
 def mmGetMetricUnionSDRDutyCycle(self):
     """
 @return (Metric) duty cycle metric for union SDR bits
 """
     data = self.mmGetDataUnionSDRDutyCycle()
     return Metric(self, "Union SDR duty cycle", data)
コード例 #25
0
 def mmGetDefaultMetrics(self, verbosity=1):
   resetsTrace = self.mmGetTraceResets()
   return ([Metric.createFromTrace(trace, excludeResets=resetsTrace)
             for trace in self.mmGetDefaultTraces()[:-3]] +
           [Metric.createFromTrace(trace)
             for trace in self.mmGetDefaultTraces()[-3:-1]])