最近在编写深度学习的相关代码,基于PyTorch,运行程序的时候,报错,报错内容如下所示:
RuntimeError: expected device cpu but got device cuda:0
归根结底,这个错误出现的主要原因是GPU类型的数据和CPU类型的数据不匹配。了解了错误的本质原因,那如何解决就非常简单了。
首先,需要分析大环境是在GPU上还是在CPU上,然后在出错的位置更改。无非就两种情况,分别如下:
-
1.将数据改为GPU支持的类型
data.cuda()
-
2.将数据改为CPU支持的类型
data.cpu()
另外,需要注意的一点是:
-
在CUDA下训练中的数据不能直接转换为numpy
需要用这行代码先将cuda数据转为cpu数据,然后在转为numpy数据。
data.cpu().detach().numpy()
这里,用我自己项目里的代码举例(环境是GPU),output是以训练好的网络模型对测试集某张图片的预测结果,是Tensor类型,支持cuda类型的。
更多参考
https://www.codeleading.com/article/38534962243/
https://stackoverflow.com/questions/63359246/runtimeerror-expected-device-cpu-and-dtype-float-but-got-device-cpu-and-dtype-b
https://cloud.tencent.com/developer/article/1762737
https://github.com/shaoshengsong/MobileNetV3-SSD/issues/5
https://blog.csdn.net/weixin_43786241/article/details/107239616