파이토치에서 리스트에 대한 타입 에러 '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