首页 > 解决方案 > 如何将 SmoothedValue 转换为 float 以使用 pyplot 进行绘图?

问题描述

我正在尝试使用 matplotlib.pyplot 从我的神经网络中绘制损失与历元图,但我遇到了一个问题。在每个 epoch 之后,损失被收集在一个数组中,并且是 SmoothedValue 对象(来自 utils.py)。现在我正试图在每个时期之后获得损失并将其存储在一个数组中,以便稍后我可以将它用作 pyplot 的轴。我这样做是通过以下方式:

for epoch in range(num_epochs):
    epoch_list.append(epoch)
    # train for one epoch, printing every 10 iterations
    metric_logger = train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)

    loss_list = metric_logger.meters.get('loss')
    loss_axis.append(loss_list)

    print("Loss: ", loss_list.value)
    print("Loss: ", loss_list.deque)
    # update the learning rate
    lr_scheduler.step()
    # evaluate on the test dataset
    coco_evaluator = evaluate(model, data_loader_test, device=device)

在每个时期训练之后,我得到与字典 metric_logger.meters 中的键“loss”相对应的值,然后我将其附加到我的数组 loss_axis。但是,metric_logger.meters 中的元素属于 SmoothedValue 类型,然后我的程序无法解释它来绘制它。如何将此平滑值类型转换为浮点数以便绘制它?

标签: pythonneural-networkpytorchsmoothing

解决方案


如果您替换为 . 它应该可以loss_axis.append(loss_list)工作loss_axis.append(loss_list.value)


推荐阅读