PyTorch で "RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!" エラーが発生した
PyTorchでプログラムを実行したところ、
"RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!"
というエラーメッセージが。
CUDAとCPU、2つあるよ、というエラー。
たいていの場合、変数を作るときにto(torch.device("cuda:0"))をし忘れてるコードがあって、cpu上の変数とgpu上の変数を掛け算とかしようとして怒られてるケースがほとんどだろう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
どうしたらいいの?という答えは、ちゃんと全部の変数に.to(torch.device("cuda:0")を設定すればいい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
ここで、 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
というコードを書いたが、これはcudaが使える時はcuda、使えない時はcpuにするための一文。
CUDAに対応してないマシンでもcpuで動かすことができる(が遅いし現実的ではない。エラーにして終わらしたほうが良い場合もある)
だけなんだけど、全部のコードをGPU上と仮定してよいなら、以下のコードを書けば常にtensor変数はGPU上の変数とみなされる(デフォルトではCPU上の変数とみなされる)ので問題なくなる。
1 2 |
|
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
以上!
numpy.arrangeについて
上記のコードで _x = np.arange(-2.0, 6.0, 0.5) とか書いてるけど何してるのコレ?
これは任意の等間隔の配列を作ってくれるnumpyの関数!
numpy.arange(start, stop, step)
第一引数:開始の値
第二引数:終了の値
第三引数:ステップ数
で、例えばnm.arrange(0,10,1)だと0~10まで1ステップずつ増やした値になるので、以下のような値になる。
1 |
|