pyg-team/pytorch_geometric

Laplacian Eigenvector PE is not deterministic

开放

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

 (5 条评论) (0 个反应) (0 位负责人)Python (3,514 个派生)batch import
bugdeterminismhelp wantedtransform

仓库指标

星标
 (19,985 个星标)
PR 合并指标
 (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.

贡献者指南