负功率的功率产生误差?

2024-04-19 07:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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) 

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


Tags: fromimportselfaddsizeindex错误torch
1条回答
网友
1楼 · 发布于 2024-04-19 07:12:04

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

要解决此问题,请首先将输入deg转到float:

deg = deg.float()
deg_inv = deg.pow(-1)

或在pow中传递-1.

deg_inv = deg.pow(-1.)

相关问题 更多 >