当我们在 PyTorch 张量上调用 cpu().data.numpy() 会发生什么?

jai*_*j95 1 machine-learning pytorch

我正在做一个项目,需要将损失张量中的数据传递给绘图库。

当我执行此调用时会发生什么 -> loss.cpu().data.numpy()

是否有从计算图中分离张量的风险?

Mic*_*ngo 5

.cpu() 将张量复制到 CPU,但如果它已经在 CPU 上,则没有任何变化。

.numpy()从张量创建一个 NumPy 数组。张量和数组共享底层内存,因此如果就地修改 NumPy 数组,更改将反映在原始张量中。如果您计划对 NumPy 数组进行就地修改,您通常应该创建它的副本。在lossGPU 上的情况下,loss.cpu()已经创建了一个副本,因此就地修改只会影响您没有使用的中间 CPU 张量。

是否有从计算图中分离张量的风险?

不,原始张量loss在计算图方面不受此影响。