You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

torch_geometric的LinkNeighborLoader是否会重命名图节点?

关于LinkNeighborLoader子图节点ID重映射的确认

你的怀疑完全正确:LinkNeighborLoader在生成小批量子图时,会自动将采样到的节点重新映射为从0开始的连续ID。

原因说明

每次采样的子图仅包含原图的部分节点,为了让子图的节点索引更紧凑、减少内存开销,PyTorch Geometric会对这些节点做重编号处理。子图里的节点ID是相对索引,而非原图的原始ID,所以你看到的[11, 0]是子图内部的边索引,和原图的节点ID不直接对应。

验证与原图ID的映射

每个batch对象中包含n_id张量,它存储了子图节点ID到原图节点ID的映射关系:

  • 子图中的节点i,对应的原图节点ID是batch.n_id[i]

你可以通过以下代码验证这条边在原图中是否存在:

for batch in train_loader:
    # 取子图中第一条边的节点ID
    src_sub = batch.edge_index[0][0]
    dst_sub = batch.edge_index[1][0]
    # 映射回原图ID
    src_original = batch.n_id[src_sub]
    dst_original = batch.n_id[dst_sub]
    # 验证原图中是否存在该边
    exists = ((graph.edge_index[0] == src_original) & (graph.edge_index[1] == dst_original)).any()
    print(f"子图边[{src_sub}, {dst_sub}]对应原图边[{src_original}, {dst_original}],是否存在:{exists}")

补充说明

这种节点重映射是PyTorch Geometric所有子图采样器的默认行为,n_id是Batch对象的核心属性之一,用于关联子图与原图的节点信息。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:22:38