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

使用NeighborLoader/HGTLoader创建异构图DataLoader时返回空对象问题排查

问题定位与解决方案

核心原因:输入节点ID不符合PyG HeteroData规则

PyG的HeteroData中,每种节点类型的ID是独立从0开始编号的,而非全局连续ID。你的测试图中:

  • user节点的x形状是[5,1],说明共有5个user节点,合法ID范围是0~4
  • poi节点的x形状是[10,1],说明共有10个poi节点,合法ID范围是0~9

你传入的user_ids = (10,11,12,13,14)属于不存在的节点ID,采样器无法找到对应节点,因此返回空对象。

次要问题:NeighborLoader参数逻辑确认

你的NeighborLoader中num_neighbors参数格式是正确的(针对边类型设置采样数),但同样受节点ID错误影响导致失效。


修正后的代码

1. HGTLoader修正版

data_loader = HGTLoader(
    data, 
    batch_size=2, 
    # 使用合法的user节点ID范围0~4
    input_nodes=('user', torch.tensor([0, 1, 2, 3, 4], dtype=torch.long)),
    num_samples={key: [2]  for key in data.node_types}, 
    shuffle=True, 
)

2. NeighborLoader修正版

data_loader= NeighborLoader(
    data, 
    batch_size=2, 
    # 使用合法的user节点ID范围0~4
    input_nodes=('user', torch.tensor([0, 1, 2, 3, 4], dtype=torch.long)), 
    num_neighbors={key: [2]  for key in data.edge_types}, 
    shuffle=True
)

额外验证步骤

  1. 确认节点ID合法性:
    print(f"User节点数量: {data.user.x.shape[0]},合法ID: 0~{data.user.x.shape[0]-1}")
    print(f"POI节点数量: {data.poi.x.shape[0]},合法ID: 0~{data.poi.x.shape[0]-1}")
    
  2. 检查边索引正确性:确保edge_index中的源/目标节点ID属于对应类型的合法范围,比如(user, visits, poi)的edge_index[0](user节点ID)必须在0~4之间,edge_index[1](poi节点ID)必须在0~9之间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:16:11