#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. Спасибо, это сработало, я сходил с ума. Мне действительно нужно изучить основы, ха-ха.