Ошибка: Ожидалось, что все тензоры будут находиться на одном устройстве, в то время как все они находятся на одном устройстве

#pytorch #tensor

#пыторч #тензор

Вопрос:

Я не знаю, почему я получаю эту ошибку, в то время как все мои тензоры находятся на одном устройстве «cuda». Вот код

 def train(self):  self.model.train()  self.optimizer.zero_grad() # Clear gradients.  print("X is",self.XT.get_device())  print("edge_index_ is", self.edge_index_.get_device())  print("R_train_mask is", self.R_train_mask.get_device())   print("datas.y is", self.datas.y.get_device())  print("edge_index_ is", self.edge_index_.get_device())  out = self.model(self.XT, self.edge_index_) # Perform a single forward pass.  loss = self.criterion(out[self.R_train_mask],  self.datas.y[self.R_train_mask])  

Вот ошибка

 X is 0 edge_index_ is 0 R_train_mask is 0 datas.y is 0 edge_index_ is 0 Traceback (most recent call last):  File "/home/adnan/GNNPaperCodes/PyGCL/examples/GCAPaperAd.py", line 126, in lt;modulegt;  main()  File "/home/adnan/GNNPaperCodes/PyGCL/examples/GCAPaperAd.py", line 91, in main  topfeatures=tf.TopFeaturesFind()  File "/home/adnan/GNNPaperCodes/PyGCL/examples/PatchFinder.py", line 64, in TopFeaturesFind  loss = self.train()  File "/home/adnan/GNNPaperCodes/PyGCL/examples/PatchFinder.py", line 154, in train  out = self.model(self.XT, self.edge_index_) # Perform a single forward pass.  File "/home/adnan/.conda/envs/forGit/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl  return forward_call(*input, **kwargs)  File "/home/adnan/GNNPaperCodes/PyGCL/examples/PatchFinder.py", line 211, in forward  x = self.conv1(x, edge_index_)  File "/home/adnan/.conda/envs/forGit/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl  return forward_call(*input, **kwargs)  File "/home/adnan/.conda/envs/forGit/lib/python3.9/site-packages/torch_geometric/nn/conv/gcn_conv.py", line 181, in forward  x = self.lin(x)  File "/home/adnan/.conda/envs/forGit/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl  return forward_call(*input, **kwargs)  File "/home/adnan/.conda/envs/forGit/lib/python3.9/site-packages/torch_geometric/nn/dense/linear.py", line 103, in forward  return F.linear(x, self.weight, self.bias)  File "/home/adnan/.conda/envs/forGit/lib/python3.9/site-packages/torch/nn/functional.py", line 1848, in linear  return torch._C._nn.linear(input, weight, bias) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! (when checking argument for argument mat2 in method wrapper_mm)  

Очевидно, все в порядке, если я сменю устройство на «процессор»

Ответ №1:

Вы забыли перенести self.model данные на устройство. Действительно, у модели есть веса, которые необходимо перенести на правильное устройство, поскольку они взаимодействуют с вашим вводом.

Вы можете сделать это с self.model.to("cuda") помощью .

Комментарии:

1. Спасибо, это сработало, я сходил с ума. Мне действительно нужно изучить основы, ха-ха.