Source code for utils.moving_average

import numpy as np

[docs]def average(moving_averages): if moving_averages.items(): weighted_values, weights = list(zip( *[(ma.value * ma.weight, ma.weight) for _, ma in moving_averages.items()] )) return sum(weighted_values) / sum(weights) else: return 0
[docs]class MovingAverage(object): """ Keeps a moving average of some quantity """ def __init__(self, init_value=0): """ Parameters ---------- init_value: float the initial value of the moving average """ self.value = init_value self.weight = 0 self.init_value = init_value def __iadd__(self, new_values): """ Includes an array of values into the moving average Parameters ---------- new_values: torch/np array of floats pointwise estimates of the quantity to estimate """ self.add_array(new_values) return self
[docs] def add_array(self, new_values): """ Includes an array of values into the moving average Parameters ---------- new_values: torch/np array of floats pointwise estimates of the quantity to estimate """ new_value = new_values.mean() new_weight = len(new_values) self.add(new_value, new_weight)
[docs] def add(self, new_value, new_weight=1): """ Includes a single value into a moving average Parameters ---------- new_value: float pointwise estimate of the quantity to estimate new_weight: float a weight by which to ponder the new value """ self.value = (self.value * self.weight + new_weight * new_value) / \ (self.weight + new_weight) self.weight += new_weight
[docs] def reset(self): """ Resets the moving average to its initial conditions """ self.value = self.init_value self.weight = 0