pyg-team/pytorch_geometric

Laplacian Eigenvector PE is not deterministic

Open

#7,499 创建于 2023年6月2日

在 GitHub 查看
 (4 评论) (0 反应) (0 负责人)Python (3,514 fork)batch import
bugdeterminismhelp wantedtransform

仓库指标

Star
 (19,985 star)
PR 合并指标
 (平均合并 35天 1小时) (30 天内合并 14 个 PR)

描述

Laplacian Eigenvector PE is not deterministic, i.e. it produces different encodings when applied to the same graph at different times even with everything seeded.

This is a code that reproduces it:

import torch
import random
import numpy as np
from torch_geometric.datasets import Planetoid
from torch_geometric.transforms import AddLaplacianEigenvectorPE

def seed_everything(seed: int):
    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)

seed_everything(42)
dataset = Planetoid(root='../datasets', name='Cora')
data = dataset[0]

lpe1 = AddLaplacianEigenvectorPE(k=124, attr_name="lpe1")
lpe2 = AddLaplacianEigenvectorPE(k=124, attr_name="lpe2")

# add lpe1
data = lpe1(data)
# add lpe2
data = lpe2(data)

# get pe
pe1 = data.lpe1
pe2 = data.lpe2

print(torch.allclose(pe1, pe2))  # prints False

# print for manual inspection
print(pe1[:5, :10])
print(pe2[:5, :10])

Environment

  • PyG version: 2.3.1
  • PyTorch version: 2.0.1+cu118
  • OS: Linux (Ubuntu 20.04)
  • Python version: 3.10
  • CUDA/cuDNN version: 12.0
  • How you installed PyTorch and PyG (conda, pip, source): pip.
  • Any other relevant information (e.g., version of torch-scatter): None.

贡献者指南