Source code for avalanche.evaluation.metrics.mean

################################################################################
# Copyright (c) 2021 ContinualAI.                                              #
# Copyrights licensed under the MIT License.                                   #
# See the accompanying LICENSE file for terms.                                 #
#                                                                              #
# Date: 19-01-2021                                                             #
# Author(s): Lorenzo Pellegrini                                                #
# E-mail: contact@continualai.org                                              #
# Website: www.continualai.org                                                 #
################################################################################

from typing import SupportsFloat

from avalanche.evaluation import Metric


[docs]class Mean(Metric[float]): """ The standalone mean metric. This utility metric is a general purpose metric that can be used to keep track of the mean of a sequence of values. """
[docs] def __init__(self): """ Creates an instance of the mean metric. This metric in its initial state will return a mean value of 0. The metric can be updated by using the `update` method while the mean can be retrieved using the `result` method. """ self.summed: float = 0.0 self.weight: float = 0.0
def update(self, value: SupportsFloat, weight: SupportsFloat = 1.0) -> None: """ Update the running mean given the value. The value can be weighted with a custom value, defined by the `weight` parameter. :param value: The value to be used to update the mean. :param weight: The weight of the value. Defaults to 1. :return: None. """ value = float(value) weight = float(weight) self.summed += value * weight self.weight += weight def result(self) -> float: """ Retrieves the mean. Calling this method will not change the internal state of the metric. :return: The mean, as a float. """ if self.weight == 0.0: return 0.0 return self.summed / self.weight def reset(self) -> None: """ Resets the metric. :return: None. """ self.summed = 0.0 self.weight = 0.0 def __add__(self, other: "Mean") -> "Mean": """ Return a metric representing the weighted mean of the 2 means. :param other: the other mean :return: The weighted mean""" res = Mean() res.summed = self.summed + other.summed res.weight = self.weight + other.weight return res
[docs]class Sum(Metric[float]): """ The standalone sum metric. This utility metric is a general purpose metric that can be used to keep track of the sum of a sequence of values. Beware that this metric only supports summing numbers and the result is always a float value, even when `update` is called by passing `int` only. """
[docs] def __init__(self): """ Creates an instance of the sum metric. This metric in its initial state will return a sum value of 0. The metric can be updated by using the `update` method while the sum can be retrieved using the `result` method. """ self.summed: float = 0.0
def update(self, value: SupportsFloat) -> None: """ Update the running sum given the value. :param value: The value to be used to update the sum. :return: None. """ self.summed += float(value) def result(self) -> float: """ Retrieves the sum. Calling this method will not change the internal state of the metric. :return: The sum, as a float. """ return self.summed def reset(self) -> None: """ Resets the metric. :return: None. """ self.summed = 0.0
__all__ = ["Mean", "Sum"]