-
简单记录下。
-
这句话翻译一下就是,期望所有张量在同一设备上,但数据分布在两个设备上,cuda:0和cpu。
-
网上基本上就是两种解决方法:
-
方法一、哪一行报错,就把哪一行数据统一下,要么都放再CPU上,要么都放在GPU上。
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") x.to(device)
-
方法二、
x = x.cuda()
-
但是这两种方法有时候解决不了问题,我所遇到的问题,试过这两种方法,并不适用。我的问题是,搭建的网络有一部分没有写入GPU。在搭建网络时,forward函数中两种定义网络的方式不能混用。
-
如图一般我们会在inint 层定义好自己的网络,这里就以全连接层为例,对比一下正确的写法和错误的写法。
-
实现网络的不同的写法:
其是如果我们在CPU上训练,这两种写法都不会报错,但是如果要利用GPU进行训练,错误的写法就会报错。 -
最后总结一下,我们在进行网络搭建的过程中最好在__init__层定义好自己要用到的网络。
-
PS:print(变量.is_cuda),检查数据是否在GPU上,然后统一一下。
Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!
最新推荐文章于 2024-04-05 19:11:49 发布