Exemple #1
0
def test_epochwise_usage():
    class MyMetric(Metric):
        def __init__(self):
            super(MyMetric, self).__init__()
            self.value = []

        def reset(self):
            self.value = []

        def compute(self):
            return self.value

        def update(self, output):
            self.value.append(output)

    def test(usage):
        engine = Engine(lambda e, b: b)

        m = MyMetric()

        m.attach(engine, "ewm", usage=usage)

        @engine.on(Events.EPOCH_COMPLETED)
        def _():
            ewm = engine.state.metrics["ewm"]
            assert len(ewm) == 3
            assert ewm == [0, 1, 2]

        engine.run([0, 1, 2], max_epochs=10)
        m.detach(engine, usage=usage)

    test("epoch_wise")
    test(EpochWise.usage_name)
    test(EpochWise())
Exemple #2
0
 def is_attached(
     self, engine: Engine, usage: Union[str,
                                        MetricUsage] = EpochWise()) -> bool:
     usage = self._check_usage(usage)
     # check recursively the dependencies
     return super(MetricsLambda, self).is_attached(
         engine, usage) and self._internal_is_attached(engine, usage)
Exemple #3
0
 def detach(
     self, engine: Engine, usage: Union[str,
                                        MetricUsage] = EpochWise()) -> None:
     usage = self._check_usage(usage)
     # remove from engine
     super(MetricsLambda, self).detach(engine, usage)
     self.engine = None
Exemple #4
0
 def attach(self, engine: Engine, name: str, _usage: Union[str, MetricUsage] = EpochWise()) -> None:
     if self.epoch_bound:
         # restart average every epoch
         engine.add_event_handler(Events.EPOCH_STARTED, self.started)
     # compute metric
     engine.add_event_handler(Events.ITERATION_COMPLETED, self.iteration_completed)
     # apply running average
     engine.add_event_handler(Events.ITERATION_COMPLETED, self.completed, name)
Exemple #5
0
 def attach(
     self,
     engine: Engine,
     name: str,
     usage: Union[str, MetricUsage] = EpochWise()) -> None:
     usage = self._check_usage(usage)
     # recursively attach all its dependencies (partially)
     self._internal_attach(engine, usage)
     # attach only handler on EPOCH_COMPLETED
     engine.add_event_handler(usage.COMPLETED, self.completed, name)
Exemple #6
0
 def attach(self, engine: Engine, name: str, usage: Union[str, MetricUsage] = EpochWise()) -> None:
     if self._updated:
         raise ValueError(
             "The underlying metrics are already updated, can't attach while using reset/update/compute API."
         )
     usage = self._check_usage(usage)
     # recursively attach all its dependencies (partially)
     self._internal_attach(engine, usage)
     # attach only handler on EPOCH_COMPLETED
     engine.add_event_handler(usage.COMPLETED, self.completed, name)