我正在经历Andrew Ng 在 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}
我的问题是:他们为什么这样做?他们为什么不直接计算指标(这是完成的here)在 GPU 上使用 torch 方法(例如torch.sum
相对于np.sum
)?
我认为 GPU 到 CPU 的传输会减慢速度,所以应该有一个很好的理由这样做?
我是 PyTorch 的新手,所以我可能会遗漏一些东西。
如我错了请纠正我。即使在进入下一个循环周期时内存被替换,将数据发送回 CPU 也可以减少 GPU 负载。此外,我相信转换为numpy
具有释放内存的优点,因为您要将数据从计算图中分离出来。你最终会操纵labels_batch.cpu().numpy()
a fixed数组与labels_batch
通过 linkedin 连接到整个网络的张量backward_fn
回调。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)