from __future__ import absolute_import class AverageMeter(object): """Computes and stores the average and current value""" def __init__(self, momentum=0.999): self.val = 0 self.avg = 0 self.sum = 0 self.count = 0 self.long_count = 0 self.momentum = momentum self.moving_avg = 0 def reset(self): self.val = 0 self.avg = 0 self.sum = 0 self.count = 0 def update(self, val, n=1): if self.long_count == 0: self.moving_avg = val else: momentum = min(self.momentum, 1. - 1. / self.long_count) self.moving_avg = self.moving_avg * momentum + val * (1 - momentum) self.val = val self.sum += val * n self.count += n self.long_count += n self.avg = self.sum / self.count