PyTorch 几何 SAGEConv - 预期标量类型为 Long,但发现为 Float?

问题描述 投票:0回答:1

我正在尝试从模型类型的 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”

python types pytorch pytorch-geometric
1个回答
0
投票

我错误地阅读了错误消息,这让我自己感到困惑。根据 torch_geometric 的维护者 - 输入应该是浮点数,而不是长类型:

https://github.com/pyg-team/pytorch_geometric/discussions/9135#discussioncomment-8998822

© www.soinside.com 2019 - 2024. All rights reserved.