How do I convert a torch.Tensor
(on GPU) to a numpy.ndarray
(on CPU)?
Asked
Active
Viewed 4.2k times
14

Mateen Ulhaq
- 24,552
- 19
- 101
- 135

Noa Yehezkel
- 468
- 2
- 4
- 20
-
1Possible duplicate of [How to convert Pytorch autograd.Variable to Numpy?](https://stackoverflow.com/questions/44340848/how-to-convert-pytorch-autograd-variable-to-numpy) – Fábio Perez Nov 25 '18 at 12:20
3 Answers
9
Use .detach()
to convert from GPU / CUDA Tensor to numpy array:
tensor.detach().cpu().numpy()

Mateen Ulhaq
- 24,552
- 19
- 101
- 135

azizbro
- 3,069
- 4
- 22
- 36
-
4You only need to call `detach` if the `Tensor` has associated gradients. When `detach` is needed, you want to call `detach` before `cpu`. Otherwise, PyTorch will create the gradients associated with the Tensor on the CPU then immediately destroy them when `numpy` is called. Calling `detach` first eliminates that superfluous step. For more information see: https://discuss.pytorch.org/t/should-it-really-be-necessary-to-do-var-detach-cpu-numpy/35489/8?u=zayd – ZaydH Sep 14 '19 at 08:05
5
If the tensor is on gpu
or cuda
, copy the tensor to cpu
and convert it to numpy array using:
tensor.data.cpu().numpy()
If the tensor is on cpu
already you can do tensor.data.numpy()
. However, you can also do
tensor.data.cpu().numpy()
. If the tensor is already on cpu
, then the .cpu()
operation will have no effect. And this could be used as a device-agnostic way to convert the tensor to numpy array.

Mateen Ulhaq
- 24,552
- 19
- 101
- 135

Umang Gupta
- 15,022
- 6
- 48
- 66
-
**NOTE:** Using `tensor.data` without detaching may have unintended consequences, [as explained here](https://github.com/pytorch/pytorch/issues/6990#issuecomment-384680164) and [here](https://pytorch.org/blog/pytorch-0_4_0-migration-guide/#what-about-data). – Mateen Ulhaq Jul 29 '22 at 06:28