在模型训练过程中,时常可以看到AverageMeter()类的出现
其中多数时候train:采用自定义的AverageMeter类来管理一些变量的更新。
读取某个变量的时候,通过对象.属性的方式来读取
在初始化的时候就调用的重置方法reset。
当需要进行变量更新时,调用该类对象的update方法,从源代码来看,是对所有的batchsize的损失取平均。
其源码如下:
class AverageMeter(object):
"""Computes and stores the average and current value"""
def __init__(self, name, fmt=':f'):
self.name = name
self.fmt = fmt
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0
self.count = 0
def update(self, val, n=1):
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
def __str__(self):
fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})'
return fmtstr.format(**self.__dict__)
应用案例:引用https://blog.csdn.net/qq_39783265/article/details/105398427
if __name__ == "__main__":
losses = AverageMeter('AverageMeter')
loss_list = [0.5,0.4,0.5,0.6,1] #每一个batchsize中样本的平均损失
batch_size = 2
for los in loss_list:
losses.update(los,batch_size)
print(losses.avg)
print(losses)
##输出
0.5
0.45
0.4666
0.5
0.6