我正在尝试从模型类型的 torch_geometric 库实现图神经网络。我收到错误:“RuntimeError:预期标量类型 Long 但发现 Float”在 SAGEConv 模块的这一行中:
"(My Path)\Python310\lib\site-packages\torch_geometric\nn\dense\linear.py", line 147, in forward
F.linear(x, self.weight, self.bias)
RuntimeError: expected scalar type Long but found Float
我意识到 Stack Overflow 上也有类似的问题,但我认为在 torch_geometric 中没有关于如何有效排除故障的明确指导。我尝试将问题简化为尽可能简单的代码:
首先,我导入 SAGEConv:
import torch
from torch_geometric.nn import SAGEConv
sconv = SAGEConv((-1, -1), 64)
然后,我为该图创建非常基本的节点和边张量:
x = torch.tensor([[1,0],[2,4],[5,7]]) # Three Node Graph; Two "features" per node
ei = torch.tensor([[1, 1],[0,2]]) # Edge Index Matrix - Node 1 to Node 0 and Node 1 to Node 2
最后,我调用我的 SAGEConv 层
sconv(x, ei)
>>> (...) RuntimeError: expected scalar type Long but found Float
我无法理解这个问题,因为“x”和“ei”变量都是 LongTensor 类型:
x.type()
>>> 'torch.LongTensor'
ei.type()
>>> 'torch.LongTensor'
这让我有点疯狂。任何有关查找我做错的事情的帮助将不胜感激。如果出现版本问题,这是我的包的 pip freeze:
torch==2.0.1
torch_geometric==2.5.0
编辑1:
我将
torch
和torch_geometric
都升级到最新版本,错误仍然存在。虽然现在的消息是“预期 m1 和 m2 具有相同的 dtype,但得到: __int64 != float”