0
点赞
收藏
分享

微信扫一扫

pytorch中meter.AverageValueMeter()使用方法


​PyTorchNet​​​从TorchNet迁移而来,其中提供了很多有用的工具,例如​​meter​​,meter提供了一些轻量级的工具,帮助用户快速计算训练过程中的一些指标。

​AverageValueMeter​​能够计算所有数的平均值和标准差,同意几个epoch中损失的平均值。

​ClassErrorMeter​​能够计算每个epoch下的类别错误率,在分类任务经常使用。

下面我们介绍下如何使用AverageValueMeter()这个方法计算每个epoch的损失值,对于这个目的,我们可以通过定义变量,然后不断累加每个批次的数据,然后进行计算,但是现在有一个更好的工具,可以帮助我们实现这个操作。

首先使用meter.AverageValueMeter()实例化一个类,该类可以想成内部有一个集合,里面会保存一些数据,并定义一些方法能够对这些数据进行处理来满足我们的要求,说白了就是把我们正常计算指标的代码封装到一个类中。

loss_meter = meter.AverageValueMeter()

我们只需要调用类的add函数不断将数据添加到其中即可,该函数有一个参数,为待添加的标量值,这里我们添加的是每个epoch的损失值。

loss_meter.add(loss.item())

然后等一个epoch的所有结果全部填入其中之后,就可以使用​​loss_meter.value​​获得结果

loss_meter.mean

而且还需要注意一个问题,当我们处理完一个epoch之后,需要清空当前的信息,只需要调用​​reset()​​即可。

下面使用一个示例来说明如何使用:

for epoch in range(20):
model.train()
for data in tqdm(train_loader):
images, labels = data
optimizer.zero_grad()
output = model(images)
loss = loss_function(output, labels)
loss.backward()
optimizer.step()

loss_meter.add(loss.item())
error_meter.add(output.detach(), labels)

# 打印信息
print("【EPOCH: 】%s" % str(epoch + 1))
print("训练集损失为%s" % (str(loss_meter.mean)))
print("训练集精度为%s" % (str(100 - error_meter.value()[0]) + '%'))
loss_meter.reset()
error_meter.reset()


model.eval()
for data in tqdm(val_loader):
images, labels = data
optimizer.zero_grad()
output = model(images)
loss = loss_function(output, labels)
loss.backward()
optimizer.step()

loss_meter.add(loss.item())
error_meter.add(output.detach(), labels)

print("【EPOCH: 】%s" % str(epoch + 1))
print("验证集损失为%s" % (str(loss_meter.mean)))
print("验证集精度为%s" % (str(100 - error_meter.value()[0]) + '%'))
loss_meter.reset()
error_meter.reset()


举报

相关推荐

0 条评论