我正在学习吴恩达在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
回调连接到整个网络的张量(。