logo

파이토치에서 리스트에 대한 타입 에러 'TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.' 해결법 📂머신러닝

파이토치에서 리스트에 대한 타입 에러 'TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.' 해결법

에러

TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

분명히 파이토치 텐서나 넘파이 배열이 아니라 리스트를 다루고 있음에도 불구하고 위와 같은 에러가 나올 수 있다. 시키는대로 .cpu().numpy() 메서드를 쓰면 다음과 같은 에러를 만난다.

AttributeError: 'list' object has no attribute 'cpu'

해결법

이러한 에러가 뜨는 원인은 리스트의 원소가 파이토치 텐서이기 때문이다. 따라서 에러를 해결하기 위해서는 torch.stack()을 사용해서 리스트를 1차원 텐서로 바꿔주면 된다.

이 문제는 윈도우10/Python 3.9.2/torch==1.8.1+cu111 환경에서는 일어나지 않는데, 리눅스/Python 3.9.7/torch==1.10.1+cu113 환경에서는 발생해서 사람을 개빡치게 만든다.

환경

  • OS: Ubuntu 20.04.3
  • Version: Python 3.9.7, torch 1.10.1+cu113