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())
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)
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
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)
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)
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)