在训练期间对度量进行评估时,是否应将数据批次移动到CPU并转换(从torch Tensor)为numpy数组



我正在学习吴恩达在CS230斯坦福课程中的教程,在培训的每个阶段,评估都是通过计算指标来进行的。

但在计算度量之前,他们会将批处理发送到CPU,并将其转换为numpy数组(此处代码(。

# extract data from torch Variable, move to cpu, convert to numpy arrays
output_batch = output_batch.data.cpu().numpy()
labels_batch = labels_batch.data.cpu().numpy()
# compute all metrics on this batch
summary_batch = {metric: metrics[metric](output_batch, labels_batch) for metric in metrics}

我的问题是:他们为什么这么做?为什么他们不使用torch方法(例如torch.sum而不是np.sum(在GPU上计算度量(在这里完成(?

我认为GPU到CPU的传输会减慢速度,所以应该有一个很好的理由这样做吗?

我是PyTorch的新手,所以我可能会错过一些东西。

如果我错了,请纠正我。将数据发送回CPU可以减少GPU负载,即使在进入下一个循环周期时更换了内存。此外,我相信转换为numpy具有释放内存的优势,因为您将数据从计算图中分离出来。您最终会操纵labels_batch.cpu().numpy()(一个固定的数组(与labels_batch(一个通过链接的backward_fn回调连接到整个网络的张量(。

相关内容

最新更新