logo

PyTorchでリストのタイプエラー「TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.」の解決方法 📂機械学習

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