Python 负功率的功率产生误差?

Python 负功率的功率产生误差?,python,pytorch,Python,Pytorch,我得到一个令人困惑的错误,我不知道为什么会发生。这就是我得到的错误: torch.Size([24047]) tensor([1315, 1318, 1472, 1454, 1318, 1337, 1453, 1454, 1317, 1310]) Traceback (most recent call last): ... deg_inv = deg.pow(-1) RuntimeError: Integers to negative integer powers are no

我得到一个令人困惑的错误,我不知道为什么会发生。这就是我得到的错误:

torch.Size([24047])
tensor([1315, 1318, 1472, 1454, 1318, 1337, 1453, 1454, 1317, 1310])

Traceback (most recent call last):
    ...
    deg_inv = deg.pow(-1)
RuntimeError: Integers to negative integer powers are not allowed.
这是代码的一部分:

from torch_scatter import scatter_add
from torch_geometric.utils import add_remaining_self_loops, add_self_loops, remove_self_loops
...
    if edge_weight ==None:
        edge_weight = torch.ones((edge_index.size(1), ), dtype=dtype,
                                     device=edge_index.device)
    fill_value = 1
    edge_index, edge_weight = add_self_loops(
        edge_index, edge_weight, fill_value, num_nodes)  
    row, col = edge_index
    deg = scatter_add(edge_weight, row, dim=0, dim_size=num_nodes)

    print(deg.size())
    print(deg[:10])

    deg_inv = deg.pow(-1) 

我没有在网上找到任何与此相关的内容。我不确定为什么会发生这种情况?

您的
deg
张量存储为
int
类型。相当合理的是,如果您在整数类型张量之间执行二进制操作,则假定您仍应获得整数输出。但是,对于
pow
,如果输入是
2
,而幂是
-1
,即使两个操作数都是整数类型,输出也不是。我猜Pytork只是禁止这样做

要解决此问题,请先将输入
deg
旋转为浮动:

deg = deg.float()
deg_inv = deg.pow(-1)
或在
pow
中通过
-1.

deg_inv = deg.pow(-1.)

非常感谢。你知道为什么
scatter\u add
返回一个
int
张量吗?在docs()中的示例中,返回类型是一个
FloatTensor
,但似乎没有任何明显的区别。@VictorM是您的
edge\u weight
也是
int
类型?@VictorM还有,在您提供的链接中,它的示例代码段用
torch.Tensor
初始化
src
,默认情况下,即使您写入整数,它也是浮动32;不像
torch.tensor
,如果你写整数,它就是
int64