PyTorchでリストのタイプエラー「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.
リストを扱っているのに、PyTorchテンソルやNumPy配列ではないにもかかわらず、上記のようなエラーが発生することがある。指示通りに.cpu()
や.numpy()
メソッドを使うと、次のようなエラーに遭遇する。
AttributeError: 'list' object has no attribute 'cpu'
解決法
このようなエラーが発生する理由は、リストの要素がPyTorchテンソルだからです。したがって、エラーを解決するためには、torch.stack()
を使用してリストを1次元テンソルに変えればいいです。
この問題は、Windows 10/Python 3.9.2
/torch==1.8.1+cu111
環境では発生しないが、Linux/Python 3.9.7
/torch==1.10.1+cu113
環境では発生し、非常にイライラさせます。
環境
- OS: Ubuntu 20.04.3
- バージョン: Python 3.9.7, torch 1.10.1+cu113