使用NeighborLoader/HGTLoader创建异构图DataLoader时返回空对象问题排查
问题定位与解决方案
核心原因:输入节点ID不符合PyG HeteroData规则
PyG的HeteroData中,每种节点类型的ID是独立从0开始编号的,而非全局连续ID。你的测试图中:
user节点的x形状是[5,1],说明共有5个user节点,合法ID范围是0~4poi节点的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 )
额外验证步骤
- 确认节点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}") - 检查边索引正确性:确保
edge_index中的源/目标节点ID属于对应类型的合法范围,比如(user, visits, poi)的edge_index[0](user节点ID)必须在0~4之间,edge_index[1](poi节点ID)必须在0~9之间。
内容的提问来源于stack exchange,提问作者Christian Bellomo
相关产品推荐
相关产品推荐

