pytorch cuda错误

2022-09-30 12:38:13

最近我运行了一个简单的代码出现了下面的错误

Expected object of backend CUDA but got backend CPU for argument #4 'mat1'

过程是这样的,我建立了一个模型model = LeNet(),然后判断是否有cuda,如果存在cuda,然后将模型迁移到cuda

if torch.cuda.is_available():
    model.cuda()

在模型训练中也同样的操作,在dataloader中提取出来的数据,然后放入cuda中,但是后面出现了上面的错误。

for (data, label) in tqdm(dataloader):
                data = data.view(data.size(0), -1)
                data = torch.autograd.Variable(data, requires_grad = True)
                if torch.cuda.is_available():
                    data.cuda()

原因在于模型迁移到cuda的命令model.cuda()可以将模型复制到GPU上,且改变变量model作为GPU内存的变量,后面引用model的时候用的都是GPU上的数据,而data.cuda()却正好相反,只有返回值才能在GPU上,所以正确的做法是data = data.cuda()
造成上述的差异的原因是torch.nn.Module.cuda()torch.Tensor.cuda()的问题,同样会出现问题的是
torch.nn.Module.to()torch.Tensor.to()

  • 作者:PiggyGaGa
  • 原文链接:https://blog.csdn.net/luoluonuoyasuolong/article/details/88542741
    更新时间:2022-09-30 12:38:13